簡單生產者消費者模型 java實現

2021-07-24 16:25:36 字數 1498 閱讀 7911

/**

* created by butter on 16-11-16.

*//**

* * 生產者與消費者模型中,要保證以下幾點:

* 1 同一時間內只能有乙個生產者生產 生產方法加鎖sychronized

* 2 同一時間內只能有乙個消費者消費 消費方法加鎖sychronized

* 3 共享空間空時消費者不能繼續消費 消費前迴圈判斷是否為空,空的話將該執行緒wait,釋放鎖允許其他同步方法執行

* 4 共享空間滿時生產者不能繼續生產 生產前迴圈判斷是否為滿,滿的話將該執行緒wait,釋放鎖允許其他同步方法執行

* */

/** *

* 生產者: 一直生產,直到生產完10個

* 在生產過程中,如果庫存中存滿(1個)則停止生產(由clerk控制)

* */

class producer implements runnable

@override

public

void

run() catch (interruptedexception e) }}

}/**

* 消費者:不斷消費,直到消費10個

* 消費過程中,如果庫存有貨則消費,沒貨等待(clerk中wait())

*/class consumer implements runnable

@override

public

void

run() catch (interruptedexception e) }}

}/**

* 售貨員: 負責控制庫存,如果庫存沒貨:通知生產者開始生產(notify), 並且通知消費者等待(wait)

* ,如果庫存有貨:通知生產者停止生產(wait), 並且通知消費者開始消費(notify)

* notify() / notifyall() :通知 實質上相當於 喚醒

* 加synchronized 為了保證,同一時刻只有乙個生產者在生產,只有乙個消費者在消費

* */

class clerk

public

synchronized

intgetprodect() throws interruptedexception

private

synchronized

void

waitifempty() throws interruptedexception

}private

synchronized

void

waitiffull() throws interruptedexception

}}/**

* 主類

*/public

class

demo_producercomsumer

}

Java 生產者 消費者模型

生產者消費者問題是執行緒模型中的經典問題 生產者和消費者在同一時間段內共用同一儲存空間,生產者向空間裡生成資料,而消費者取走資料。此處實現如下情況的生產 消費模型 生產者不斷交替地生產兩組資料 姓名 1 內容 1 姓名 2 內容 2 消費者不斷交替地獲取這兩組資料,這裡的 姓名 1 和 姓名 2 模...

Java 生產者消費者模型

1.基於synchronzied底層,與wait notifyall實現 object類提供的wait notify方法,配合synchronized使用,操作更底層,可擴充套件性和可控制性小。先來介紹一下wait notify notifyall 方法 wait object類的方法,只能在同步方...

生產者消費者模型

1.生產者消費者問題 producer consumer 有限緩衝,多執行緒同步。生產者執行緒和消費者執行緒共享固定大小緩衝區。2.關鍵是保證生產者不會再緩衝區滿時加入資料,消費者不會在緩衝區空時消耗資料。3.解決辦法 讓生產者在緩衝區滿時休眠,等下次消費者消耗緩衝區中的資料的時候,生產者才能被喚醒...