join()把指定的執行緒加入到當前執行緒,可以將兩個交替執行的執行緒合併為順序執行的執行緒。比如在主線程中呼叫了執行緒a的join()方法(a.join()),則直到執行緒a執行完畢後,才會繼續執行執行緒主線程。
t.join(); 等待執行緒 t 執行完畢,再執行呼叫t執行緒方法的執行緒。(大概就是這個意思)
t.join(1000); 等待 t 執行緒,等待時間是1000毫秒。
下面是join方法的原始碼
public
final
synchronized
void
join(long millis)
throws interruptedexception
if (millis == 0)
} else
wait(delay);
now = system.currenttimemillis() - base;}}
}
從**上看,如果執行緒生成了,但還未被起動,呼叫它的 join() 方法是沒有作用的,將直接繼續向下執行。join方法實現是通過wait(object 類的方法)。 當main執行緒呼叫t.join時候,main執行緒會獲得執行緒物件t的鎖(wait 意味著拿到該物件的鎖),呼叫該物件的wait(等待時間),直到該物件喚醒main執行緒 ,比如退出後。這就意味著main 執行緒呼叫t.join時,必須能夠拿到執行緒t物件的鎖。
關於多執行緒的同步與鎖,可以參考多執行緒的同步與鎖。
下面是一道面試題:
package test03;
public
class demo01 catch (interruptedexception e)
system.out.println("run方法結束!");
}});
t.start();
t.join(1000);//2
system.out.println("joinfinish!");
system.out.println("主方法結束!");
}}
結果為:
begin sleeping!
joinfinish!
主方法結束!
end sleeping
run方法結束
這裡t執行緒睡了2000毫秒,主線程只等待1000毫秒,所以結果如上。
假如2處改為3000,則結果為:
begin sleeping!
end sleeping
run方法結束!
joinfinish!
主方法結束!
java 執行緒協作 join方法
在實際開發中我們往往會遇到這樣的情況乙個執行緒的執行需要依賴另乙個執行緒執行後的結果。即主線程生成並起動了子執行緒,如果子執行緒裡要進行大量的耗時的運算,主線程往往將於子執行緒之前結束,但是如果主線程處理完其他的事務後,需要用到子執行緒的處理結果,也就是主線程需要等待子執行緒執行完成之後再結束,這個...
Java執行緒Join方法介紹
thread類中的join方法的主要作用就是同步,它可以使得執行緒之間的並行執行變為序列執行。public class test1 class testthreadjoin extends thread public testthreadjoin string name public void ru...
java 多執行緒之join 方法
join 方法作用 阻塞執行緒,即等同於主線程進入子執行緒的wait 方法,等待子執行緒執行完,喚醒主線程才能繼續執行,子執行緒join到主線程。join 只阻塞主線程,若執行緒中有其他執行緒,仍然是並行狀態 如 main是主線程,在main中建立了thread執行緒,在main中呼叫了thread...