• Join方法主要是用来阻塞调用线程,直到某个线程终止或经过了指定时间为止。官方的解释比较乏味,通俗的说就是创建一个子线程,给它加了这个方法,其它线程就会暂停执行,直到这个线程执行完为止才去执行(包括主线程)
    1. class Program
    2. {
    3. static void Main(string[] args)
    4. {
    5. Thread threadA = new Thread(ThreadMethod);
    6. threadA.Name = "線程A";
    7. Thread threadB = new Thread(ThreadMethod);
    8. threadB.Name = "線程B";
    9. threadA.Start();       
    10. //threadA.Join(); 
    11. threadB.Start();       
    12. //threadB.Join();
    13. for (int i = 1; i <=3; i++)
    14. {
    15. Console.WriteLine("我是:主線程,我循環{1}次", Thread.CurrentThread.Name, i);
    16. Thread.Sleep(300); //休眠300毫秒
    17. }
    18. Console.ReadKey();
    19. }
    20. public static void ThreadMethod(object parameter)
    21. {
    22. for (int i = 1; i <=3; i++)
    23. {
    24. Console.WriteLine("我是:{0},我循環{1}次", Thread.CurrentThread.Name, i);
    25. Thread.Sleep(300); //休眠300毫秒
    26. }
    27. }
    28. }
    • 注释掉 Join

      因为线程之间的执行是随机的,所有执行结果和我们想象的一样,杂乱无章!但是说明他们是同时执行的

    Join - 图1

    • 使用 Join

      现在我们把代码中的 ThreadA.join()和ThreadB.join()方法注释取消,首先程序中有三个线程,ThreadA、ThreadB和主线程,首先主线程先阻塞,然后线程ThreadB阻塞,ThreadA先执行,执行完毕以后ThreadB接着执行,最后才是主线程执行。

    Join - 图2