Thread的非靜態(tài)方法join()讓一個線程B“加入”到另外一個線程A的尾部。在A執(zhí)行完畢之前心褐,B不能工作。例如:
? ? ? ?Thread t = new MyThread();
? ? ? ?t.start();
? ? ? ?t.join();
另外偏竟,join()方法還有帶超時限制的重載版本增蹭。 例如t.join(5000);則讓線程等待5000毫秒砂吞,如果超過這個時間羡榴,則停止等待狠怨,變?yōu)榭蛇\行狀態(tài)择懂。
線程的加入join()對線程棧導致的結(jié)果是線程棧發(fā)生了變化喻喳,當然這些變化都是瞬時的。
1publicclass TestJoin {
2 3publicstaticvoid main(String[] args) {
4 5 ? ? MyThread2 t1 = new MyThread2("TestJoin");
6 ? ?t1.start();
7try {
8 ? ? ? t1.join(); ?//join()合并線程困曙,子線程運行完之后表伦,主線程才開始執(zhí)行 9 ? ? ?}catch (InterruptedException e) { ?}
1011for(int i=0 ; i <10; i++)
12 ? ? ? ? ? ? ? System.out.println("I am Main Thread");
13 ? }
14 }
1516class MyThread2 extends Thread {
1718 ? ?MyThread2(String s) {
19super(s);
20 ? ? }
2122publicvoid run() {
23for(int i = 1; i <= 10; i++) {
24 ? ? ?System.out.println("I am "+getName());
25try {
26 ? ? ? sleep(1000); //暫停,每一秒輸出一次27 ? ? ? }catch (InterruptedException e) {
28return;
29 ? ? }
30 ? ? }
31 ? }
32 ? }
程序運行結(jié)果:
I am TestJoin
I am TestJoin
I am TestJoin
I am TestJoin
I am TestJoin
I am TestJoin
I am TestJoin
I am TestJoin
I am TestJoin
I am TestJoin
I am Main Thread
I am Main Thread
I am Main Thread
I am Main Thread
I am Main Thread
I am Main Thread
I am Main Thread
I am Main Thread
I am Main Thread
I am Main Thread
轉(zhuǎn)載:http://blog.sina.com.cn/s/blog_5c5bc9070100ytye.html