调用CalleeThread.Join()这句话的当前线程CurThread将被阻塞,直到CalleeThread线程完成后CurThread 刚刚CalleeThread.Join() 的后续代码才继续往下执行
举个栗子// 栗子
// author : jave.lin
// date : 2018-05-10
void Main()
{
Thread.CurrentThread.Name = "MainThread"; // 给当前线程命名为:MainThread
var calleeThread = new Thread(()=>
{
var ms = 100;
Console.WriteLine($"{Thread.CurrentThread.Name} Sleep {ms}ms");
Thread.Sleep(100);
Console.WriteLine($"{Thread.CurrentThread.Name} Sleep over, Join block will relrease");
});
calleeThread.Name = "CalleeThread";
for(var i = 0; i < 1000; i++)
{
Console.WriteLine($"Quickly action for {i}");
} // 这里for循环是很快就执行完的
for(var i = 0; i < 1000; i++)
{
if (i==0)
{
calleeThread.Start();
Console.WriteLine($"Wait {calleeThread.Name} sleep");
calleeThread.Join(); // 这里等calleeThread.Join()解除阻塞后即可往下执行,等指令完成即可
Console.WriteLine($"{calleeThread.Name} sleep over, continue for loop");
}
Console.WriteLine($"Wait {calleeThread.Name}.sleep over action for {i}");
}
}
参考
关于C#中Thread.Join()的一点理解 C# 理解Thread.Join()方法