C# Thread.Join的理解

调用CalleeThread.Join()这句话的当前线程CurThread将被阻塞,知道CalleeThread线程完成后CurThread才继续往下执行线程指令

举个栗子

// 栗子
// 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()方法

猜你喜欢

转载自blog.csdn.net/linjf520/article/details/80265093