了解線程Join()方法


Join的官方解釋: 阻塞調用線程,直到某個線程終止或經過了指定時間為止
Q:誰是調用線程?

A:Join代碼寫在那,哪個就是調用線程,在本例中主線程是調用線程
Q:某個線程又是指的是誰?
A:如本例thread1執行了Join方法,thread1為某個線程

 

using System; 
using System.Threading; 
  
class Join 
{ 
    static int len1 = 5; 
    static int len2 = 6; 
  
    private static string[] w1 = new string[len1]; 
    private static string[] w2 = new string[len2]; 
      
    public static void Worker1() 
    { 
        for (int i = 0; i < len1; i++) 
        { 
            w1[i] ="方法1--" + i.ToString(); 
            AddTime(1); 
            Console.WriteLine(w1[i]); 
        } 
    } 
  
    public static void Worker2() 
    { 
        for (int i = 0; i < len2; i++) 
        { 
            w2[i] = "方法2--" + i.ToString(); 
            AddTime(1); 
            Console.WriteLine(w2[i]); 
        } 
    } 
  
    //模擬代碼執行時間 
    private static void AddTime(int s) 
    { 
        DateTime d = DateTime.Now; 
        while (d.AddSeconds(s) > DateTime.Now){ } 
    } 
  
    static void Main(string[] args) 
    { 
        Thread thread1 = new Thread(new ThreadStart(Worker1)); 
        Thread thread2 = new Thread(new ThreadStart(Worker2)); 
  
        thread2.Start(); 
        thread1.Start(); 
  
        //阻塞主線程,直到thread1線程終止為止 
        //這時在thread1沒有執行完,后面的代碼是無法執行的。 
        //當然thread2執不執行完是不管的,並且thread1與thread2是同時無順運行的。 
        thread1.Join(); 
  
        Console.WriteLine("方法1已全部執行完成!"); 
        for (int i = 0; i < 5; i++) 
        { 
            Console.WriteLine("主線程開始執行--" + i.ToString()); 
            AddTime(2); 
        } 
    } 
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM