java中傳統的執行緒通訊個人見解

2021-05-28 07:06:03 字數 758 閱讀 5121

有乙個使用共同資料的經驗:要用到共同資料(包括同步鎖)的若干方法,要放到同乙個類裡。體現了程式的高內聚,也增強了程式的健壯性。

首先看乙個例子,子執行緒先迴圈10次,主線程再迴圈100次,接著子執行緒迴圈10次,主線程再迴圈100次,如此迴圈往復50次;

實現**如下:

public class traditionalthreadconnection 

}}).start();

//主線程

for(int i = 1;i<=50;i++) }

}class service catch (interruptedexception e)

} for(int i=1;i<=10;i++)

issub = false;

//子執行緒執行完之後叫醒主線程

this.notify();

} public synchronized void mainthread(int loop) catch (interruptedexception e)

} for(int i=1;i<=100;i++)

issub = true;

this.notify();

}}

還有一點要注意的地方,就在判斷是否等待的地方為什麼用到while而不是if:原因是這樣的,因為使用wait的時候有可能在沒有呼叫notify的時候自己就喚醒了,開始去執行**了,這叫做假喚醒。使用while就可以避免偽喚醒帶來的災難,還可以判斷一下是否可以去執行**。

Java傳統執行緒同步通訊

講過了執行緒互斥,接下來了解一下執行緒協作,使得多個任務彼此之間可以一起工作去解決某個問題。傳統定時器和執行緒互斥技術 當任務協作時,關鍵是這些問題之間的握手。為了實現這種握手我們使用了相同的基礎特性 互斥。互斥能夠確保只有乙個任務可以響應某種訊號,這樣就可以排除任何可能的競爭條件。在互斥之上,我們...

黑馬程式設計師 Java中傳統執行緒同步通訊技術

方法簽名 public final void wait throws interruptedexception 導致當前執行緒等待直到另乙個執行緒在這個物件上呼叫notify 方法或者notifyall 方法。換句話說,這個方法的表現就像它簡單的處理呼叫wait 0 方法。當前執行緒必須擁有這個物件...

java中的併發 執行緒通訊

目錄 1.wait notify notifyall 2.生產者消費者模式 3.多生產多消費模式 1.wait notify notifyall object類為我們定義了執行緒通訊的方法,如wait notify 等,這些方式是本地的而且是final的.1.1wait 1 呼叫wait 方法,能讓...