單生產單消費多生產多消費問題的解決及使用機制

2021-06-22 04:54:29 字數 773 閱讀 2695

wait:等待,釋放鎖。

notify:喚醒多個等待中的某乙個,僅喚醒乙個

notifyall:喚醒所有的等待

使用任務協作的時候,都是用wait和notify或notifyall技術解決。

1.論"單生產、單消費"

純粹的使用wait和notify,會進入死鎖狀態。

死鎖:都進入等待,沒人喚醒

即:有執行緒甲、乙,甲進入等待,需要乙的喚醒;由於使用wait和notify的格式

物件.wait();

物件.notify();

即必須先執行喚醒語句,再來執行等待語句。這裡的解決方案:

if(flag==false)                             c

flag=true;              d

物件.notifyall();     e

現在,假設t3喚醒t1和t2,t1進行生產,直至等待;由於t2也是被喚醒的,所以直接執行d處的**。這就是漏洞了。

理想的情況下:t1進入等待的時候,由於flag為true,t2也應該被等待。這裡就值得思考了,

根據if(條件表示式)

只要執行完**塊就會往下執行**

而我們想要在執行完**塊的時候還要去執行條件表示式,是不是想到了迴圈,有for和while,這裡使用while

while(條件表示式)                             c

flag=true;              d

物件.notifyall();     e

生產消費模型 多生產者vs多消費者

使用場景 遊戲中多個玩家生產任務,伺服器多執行緒處理任務,netty工作執行緒收到客戶端傳來資料,生成任務後,加入到任務佇列中 public abstract class basetask 任務管理器 public class mutitaskmanager private final static...

單生產者 多消費者模型

問題出處 生產者消費者問題 有乙個生產者在生產產品,這些產品將提供給若干個消費者去消費,為了使生產者和消費者能併發執行,在兩者之間設定乙個有多個緩衝區的緩衝池,生產者將它生產的產品放入乙個緩衝區中,消費者可以從緩衝區中取走產品進行消費,所有生產者和消費者都是非同步方式執行的,但它們必須保持同步,即不...

多執行緒 單生產單消費模型

建立資源物件,提供儲存和取出方法 使用synchronized 塊實現 created by shaoqinghua on 2018 5 3.定義乙個負責儲存和取出的資源類 public class resource catch interruptedexception e objs 0 obj s...