方法join的使用
在很多情況下,主線程建立並啟動子執行緒,如果子執行緒中要進行大量的耗時運算,主線程往往將早於子執行緒結束之前結。這時,如果主線程想等待子執行緒執行完成之後再結束,比如子執行緒處理乙個資料,主線程要取得這個資料中的值,就要用到join()這個方法了。方法join()的作用是等待執行緒物件銷毀。
demo案例:
package org.jksoft.thread.join;
/** * 測試案例一:讓主線程在子執行緒結束之後,再結束。我們利用的是join方法
* @author mcl
* * 2016-2-20-下午6:08:36
*/public class test1 catch (interruptedexception e)
system.out.println("我等到子執行緒結束了"); }}
class testthread extends thread
public void run() catch (interruptedexception e)
system.out.println(thread.currentthread().getname()+":"+a);
}}
執行結果:
結果分析:
方法join的作用是使所屬的執行緒物件a正常執行run()方法中的任務,而使當前主線程無期限的阻塞,等待執行緒a銷毀後,再繼續執行主線程後面的**。
方法join具有使執行緒排隊的作用,有些類似同步的執行效果。
join詳解:
1、join與synchronized的區別:
join在內部使用wait()進行等待,而synchronized關鍵字使用的是「物件監視器」原理做為同步。
2、join與interrupt彼此遇到的話,則會出現異常。
3、join(long):引數為設定等待時間。表示主線程只等待子執行緒x秒,在x秒之間內,子執行緒結束,則喚醒主線程;否則,直接喚醒主線程。
4 、join(long)與sleep(long)的區別:
由於join(long)的內部使用的是wait(long),所以它具有釋放鎖的特點,而sleep(long)不會釋放鎖。
Java多執行緒 執行緒間通訊
一,等待 通知機制 實現執行緒間的通訊 舉個例子 我們去飯店就餐,飯店上餐的時間不確定,如果我們一直去詢問前台,是不是很煩,我麼這時就處於等待 wait 狀態,但是 飯店肯定會有人肯定會通知 notify 那個桌的菜已經做好了,前台就會通知這桌的人,菜來了。1,主要的方法wait notify 這個...
Java多執行緒程式設計四 執行緒間通訊
一 等待和通知機制 1.經過前面的知識學習,我們先來看一下如果才能讓兩個執行緒互相通訊資料呢?編碼兩個執行緒如下 public class notifythread extends thread override public void run catch interruptedexception ...
JAVA 多執行緒 執行緒間的通訊
程式設計間通訊 其實就是多個執行緒在操作同乙個資源 但是操作的動作不同 wait notify notifyall 都使用在同步中,因為要對持有的監視器 鎖 的執行緒操作 所以要使用在同步中,因為只有同步才具有鎖 將這些操作執行緒的方法定義在object類中的原因是因為這些方法在操作同步執行緒時,都...