JAVA多執行緒 執行緒間通訊 四 join的使用

2021-07-10 01:59:32 字數 1325 閱讀 5252

方法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類中的原因是因為這些方法在操作同步執行緒時,都...