在多線程中往往用到join()的方法,join()是什么呢?
Thread類的Join()措施能夠將兩個交替厲行的線程並合為次序厲行的線程。例如在線程B中調用了線程A的Join()措施,線程A將插入線程B之前,直到線程A厲行告終后,才會繼續厲行線程B。
代碼如下:
package com.cn.process; public class test { /** * @param args */ public class hello implements Runnable { @Override public void run() { // TODO Auto-generated method stub for (int i = 0; i < 3; i++) { System.out.println(Thread.currentThread().getName()+i); } } } public static void main(String[] args) throws InterruptedException { String threadName = Thread.currentThread().getName(); test test=new test(); hello he=test.new hello(); Thread demo = new Thread(he,"線程");//第二個參數是線程名稱(自定義) demo.start();//調用start方法但是調用該方法只是准備線程並不是馬上啟動 demo.join(); //強制執行demo,只有當demo線程執行結束之后主線程才能繼續當前主線程執行--相當於在主線程中添加了demo的子線程, 使異步執行線程轉為同步執行 //demo.start();//join()方法在start()前后顯示的結果明顯的不一樣 可以證明只有當start()啟動后 才能正確執行join() for(int i=0;i<50;++i) { System.out.println(threadName +"線程執行-->"+i); } } }
執行的結果是:
線程0
線程1
線程2
main線程執行-->0
main線程執行-->1
main線程執行-->2
main線程執行-->3
main線程執行-->4
main線程執行-->5
main線程執行-->6
main線程執行-->7
main線程執行-->8
main線程執行-->9
main線程執行-->10
main線程執行-->11
main線程執行-->12
main線程執行-->13
main線程執行-->14
main線程執行-->15
main線程執行-->16
main線程執行-->17
main線程執行-->18
main線程執行-->19
main線程執行-->20
main線程執行-->21
main線程執行-->22
main線程執行-->23
main線程執行-->24
main線程執行-->25
main線程執行-->26
main線程執行-->27
main線程執行-->28
main線程執行-->29
main線程執行-->30
main線程執行-->31
main線程執行-->32
main線程執行-->33
main線程執行-->34
main線程執行-->35
main線程執行-->36
main線程執行-->37
main線程執行-->38
main線程執行-->39
main線程執行-->40
main線程執行-->41
main線程執行-->42
main線程執行-->43
main線程執行-->44
main線程執行-->45
main線程執行-->46
main線程執行-->47
main線程執行-->48
main線程執行-->49
ok 成功 起到了join的作用!
當我注釋掉前面的start()的時候,
以下是代碼片段:
//demo.start();//調用start方法但是調用該方法只是准備線程並不是馬上啟動
demo.join(); //強制執行demo,只有當demo線程執行結束之后主線程才能繼續當前主線程執行--相當於在主線程中添加了demo的子線程, 使異步執行線程轉為同步執行
demo.start();//join()方法在start()前后顯示的結果明顯的不一樣 可以證明只有當start()啟動后 才能執行join() 也就是說 當join()在前面的話就失去了意義
執行結果可能是(cpu有關):
線程0
main線程執行-->0
main線程執行-->1
main線程執行-->2
main線程執行-->3
main線程執行-->4
main線程執行-->5
main線程執行-->6
main線程執行-->7
main線程執行-->8
main線程執行-->9
線程1
線程2
main線程執行-->10
main線程執行-->11
main線程執行-->12
main線程執行-->13
main線程執行-->14
main線程執行-->15
main線程執行-->16
main線程執行-->17
main線程執行-->18
main線程執行-->19
main線程執行-->20
main線程執行-->21
main線程執行-->22
main線程執行-->23
main線程執行-->24
main線程執行-->25
main線程執行-->26
main線程執行-->27
main線程執行-->28
main線程執行-->29
main線程執行-->30
main線程執行-->31
main線程執行-->32
main線程執行-->33
main線程執行-->34
main線程執行-->35
main線程執行-->36
main線程執行-->37
main線程執行-->38
main線程執行-->39
main線程執行-->40
main線程執行-->41
main線程執行-->42
main線程執行-->43
main線程執行-->44
main線程執行-->45
main線程執行-->46
main線程執行-->47
main線程執行-->48
main線程執行-->49
這就可以看出了 join()先后順序是否起作用了!