講過了執行緒互斥,接下來了解一下執行緒協作,使得多個任務彼此之間可以一起工作去解決某個問題。
傳統定時器和執行緒互斥技術
當任務協作時,關鍵是這些問題之間的握手。為了實現這種握手我們使用了相同的基礎特性:互斥。互斥能夠確保只有乙個任務可以響應某種訊號,這樣就可以排除任何可能的競爭條件。在互斥之上,我們為任務新增了一種途徑,可以直接將自身掛起
執行緒通訊
例子:乙個工人蓋房子先要先抹水泥再砌磚,需要壘10排磚,壘一排磚分兩步:1、抹5次水泥 2、砌10塊磚;
用執行緒通訊的方式實現。
我們先建乙個house的類,裡面有兩個方法,抹水泥cement()和砌磚brick(),乙個工人只能進行一項工作,所以要加同步鎖;抹水泥時砌磚等待,抹完後喚醒。
package gemme.thread;
public class traditionalthreadcommunication
}}.start();
new thread()
};}.start(); }}
class worker catch (interruptedexception e)
} for (int i = 1; i <= 5; i++)
issub = false;
this.notify(); }
// 砌磚
public synchronized void brick(int loop) catch (interruptedexception e)
} for (int i = 1; i <= 10; i++)
issub = true;
this.notify();
}}
傳統執行緒同步通訊技術
什麼是執行緒同步通訊呢?其實簡單來說就是執行緒間的等待與喚醒 下面我們來了解一下 1.簡單多執行緒通訊 現在有a b執行緒,讓執行緒a先執行10次迴圈,隨後讓執行緒b執行20次,之後反覆100次 該如何實現呢?需要注意哪些問題?如下 public class main start new threa...
傳統執行緒同步通訊技術
package cn.com.songjy.test.socket.thread import org.apache.commons.logging.log import org.apache.commons.logging.logfactory classname traditionalthrea...
黑馬程式設計師 Java中傳統執行緒同步通訊技術
方法簽名 public final void wait throws interruptedexception 導致當前執行緒等待直到另乙個執行緒在這個物件上呼叫notify 方法或者notifyall 方法。換句話說,這個方法的表現就像它簡單的處理呼叫wait 0 方法。當前執行緒必須擁有這個物件...