Ⅰ java thread中的join函數什麼意思
例如在B線程執行的代碼中調用A.join()
則表示B線程暫時停止執行,去執行A線程的任務,直到A線程的任務完成後,B線程再開始執行
Ⅱ java中sleep和join和yield和wait和notify的區別
1、sleep()
使當前線程(即調用該方法的線程)暫停執行一段時間,讓其他線程有機會繼續執行,但它並不釋放對象鎖。也就是說如果有synchronized同步快禪敗,其他線程仍然不能訪問共享數據。注意該方法要捕捉異常。
例如有兩個線程同時執行(沒有synchronized)一個線程優先順序為MAX_PRIORITY,另一個為MIN_PRIORITY,如果沒有Sleep()方法,只有高優先順序的線程執行完畢後,低優先順序的線程才能夠執行;但是高優先順序的線程sleep(500)後,低優先順序就有機會執行了。
總之,sleep()可以使低優先順序的線程得到執行的機會,當然也可以讓同優先順序、高優先順序的線程有執行的機會。
2、join()
join()方法使調用該方法的線程在此之前執行完畢,也就是等待該方法的線程執行完畢後再往下繼續執行。注意該方法也需要捕捉異常。
3、yield()
該方法與sleep()類似,只是不能由用戶指定暫停多長時間,並且yield()方法只能讓同優先順序的賀知顫線猛察程有執行的機會。
4、wait()和notify()、notifyAll()
這三個方法用於協調多個線程對共享數據的存取,所以必須在synchronized語句塊內使用。synchronized關鍵字用於保護共享數據,阻止其他線程對共享數據的存取,但是這樣程序的流程就很不靈活了,如何才能在當前線程還沒退出synchronized數據塊時讓其他線程也有機會訪問共享數據呢?此時就用這三個方法來靈活控制。
wait()方法使當前線程暫停執行並釋放對象鎖標示,讓其他線程可以進入synchronized數據塊,當前線程被放入對象等待池中。當調用notify()方法後,將從對象的等待池中移走一個任意的線程並放到鎖標志等待池中,只有鎖標志等待池中線程能夠獲取鎖標志;如果鎖標志等待池中沒有線程,則notify()不起作用。
notifyAll()則從對象等待池中移走所有等待那個對象的線程並放到鎖標志等待池中。
注意 這三個方法都是java.lang.Object的方法。
Ⅲ java線程中有關join()方法的簡單問題(急)!!
只有執行到t2.start() 這個線程才會開啟 才有cpu的執行資格 在此之前只有主碰行線程才有執行資格,沒洞所以枯吵枯結果是main先執行完
Ⅳ java 線程join()
join();//當前線程邀請調用方法的線程優先執行 在調用方法的線程執行
//結束之前 當前線程不能再次執行
Ⅳ java中的join是如何讓主線程等待的
join就是阻塞調用線程,飢嘩直到該線程結束後,調用線程才能繼續執行。
該影響只存在於執行join方法的線程和調用該線程的線程之間
如在t1線程中調用t2.join(),則高肢滑需要t2線程戚臘執行完後t1方能繼續執行
Ⅵ java 的join方法在哪個類
join()是Thread類的來一個方法,t.join()方法阻源塞調用此方法的線程(calling thread),直到線程t完成,此線程再繼續;通常用於在main()主線程內,等待其它線程完成再結束main()主線程
Ⅶ java 線程 join方法
你採納的答來案第一句話就是錯誤的自.
join方法是 誰調用暫停誰
你的那道考試題,答案B,當另一個線程Join方法被調用時,停的是另一個線程,所以不會影響 本線程的運行狀態。
按照他的解釋 main都等待thread-0了,已經改變了main的狀態, 還選B?
Ⅷ java中的join(強制運行)到底是什麼意思啊
join就是阻塞調用線程,直到該線程結束後,調用線程才能繼續執行。
強制運行join後的線程。
因為main是一條主線程,所有線程都得在它啟動之後運行
Ⅸ java的join問題
join方法並不能保證下一個運行的線程神基不是目前正在運行的線程,而是會進行競爭。如果有設置優先順序,則優先順序高的線程先運行。若沒有,則隨機。建議你用中斷方法進行。
具體方法:
首先拉起兩個線程。設置thread2為中斷狀態。thread1運游野謹行,至進度條100%時,中斷thread1,脊森喚醒thread2。thread2運行,至進度條1%時,中斷thread2,喚醒thread1。如是循環就可以了。
Ⅹ java 多線線程start和join
//你試一下我這種方法,應該是因為你的線程沒有啟動,還有線程執源正行完雹巧悔成的先後順序,在你//列印這一句話的方式來看,是無法准確判斷的,我在join方法裡面加了10ms的延時,可以達//到你說的效果
packagetest;
publicclassTestThread{
publicstatic寬早voidmain(String[]args){
//TODOAuto-generatedmethodstub
try{
Threadt=newThread(newRunnable(){
@Override
publicvoidrun(){
//TODOAuto-generatedmethodstub
System.out.println("in------------");
}
});
t.start();
t.join(10);
}catch(InterruptedExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
System.out.println("out--------------");
}
}