Java的多线程:Thread类的Join()方法

来源:互联网 发布:c语言初学者百题大战 编辑:程序博客网 时间:2024/05/21 18:36

[说明:刚接触多线程时,弄不明白Join()的作用,查阅了三本书,都不明不白。后来经过自己的一番试验,终于弄清了Join()的本质。大家看看我这种写法是否易懂,是否真的写出了Join()的本质,多提宝贵意见。]

  Thread类的Join()方法能够将两个交替执行的线程合并为顺序执行的线程。比如在线程B中调用了线程A的Join()方法,线程A将插入线程B之前,直到线程A执行完毕后,才会继续执行线程B。

  试一试:线程的插入

[c-sharp] view plain copy
  1. using System;  
  2. using System.Threading;  
  3.   
  4. namespace ConsoleApplication1  
  5. {  
  6.     class Test  
  7.     {  
  8.         public static void Main()  
  9.         {  
  10.             //线程A  
  11.             Thread ThreadA = new Thread(delegate()  
  12.             {  
  13.                 for (int i = 0; i <= 100000000; i++)  
  14.                 {  
  15.                     if (i % 1000000 == 0)  
  16.                     {  
  17.                         Console.Write('A');  
  18.                     }  
  19.                 }  
  20.             });  
  21.   
  22.             //线程B  
  23.             Thread ThreadB = new Thread(delegate()  
  24.             {  
  25.                 for (int i = 0; i <= 50000000; i++)  
  26.                 {  
  27.                     if (i % 1000000 == 0)  
  28.                     {  
  29.                         Console.Write('B');  
  30.                     }  
  31.                 }  
  32.   
  33.                 //在这里插入线程A  
  34.                 ThreadA.Join();  
  35.   
  36.                 for (int i = 0; i <= 50000000; i++)  
  37.                 {  
  38.                     if (i % 1000000 == 0)  
  39.                     {  
  40.                         Console.Write('b');  
  41.                     }  
  42.                 }  
  43.             });  
  44.   
  45.             //启动线程  
  46.             ThreadA.Start();  
  47.             ThreadB.Start();  
  48.             Console.ReadKey();  
  49.   
  50.         }  
  51.   
  52.    }  
  53. }  

 由运行结果可以看出,一开始两个线程交替进行,当线程B执行到语句“ThreadA.Join()”时,线程A被插入到线程B之前,两个线程合并到一起,变为顺序执行,直到执行完线程A中的所有语句,才去执行线程B中剩余的语句。

  换句话说,当我们在线程B中调用ThreadA.Join()时,该方法只有在线程ThreadA执行完毕之后才会返回。Join()函数还可以接受一个表示毫秒数的参数,当达到指定时间后,如果线程A还没运行完毕,那么Join函数将返回,这时线程A和线程B再次处于交替运行状态中。

0 0
原创粉丝点击