有乙個使用共同資料的經驗:要用到共同資料(包括同步鎖)的若干方法,要放到同乙個類裡。體現了程式的高內聚,也增強了程式的健壯性。
首先看乙個例子,子執行緒先迴圈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 方法,能讓...