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);
}
}
}
