等待喚醒機制實現生產者消費者模型

2021-09-20 21:23:49 字數 1438 閱讀 8869

**類

public

class

tmail

catch

(interruptedexception e)

} count++

; system.out.

println

(thread.

currentthread()

.getname()

+" 生產者生產,當前庫存為:"

+count)

;notifyall()

;}//消費者消費產品

public

synchronized

void

take()

catch

(interruptedexception e)

} count--

; system.out.

println

(thread.

currentthread()

.getname()

+" 消費者消費,當前庫存為:"

+count)

;notifyall()

;}}

以上**類,表明商品數量count和最大商品數量。

當生產的商品達到最大商品數量後,生產者將停止生產。

當消費的商品為零後,消費者將停止消費。

當生產者開始生產,喚醒所有正在等待的消費者。

當消費者開始消費,喚醒所有正在等待的生產者。

以上涉及到了while 和 if 修飾wait的問題

如果使用 if 修飾wait 那麼執行緒被喚醒後,將繼續執行wait 後面的內容,不會再次進行判斷。

如果使用while修飾,那麼執行緒被喚醒後,將會繼續判斷是否滿足條件

生產者類

class

pushtarget

implements

runnable

@override

public

void

run(

)catch

(interruptedexception e)}}

}

消費者類

class

taketarget

implements

runnable

@override

public

void

run(

)catch

(interruptedexception e)}}

}

測試類

public

class

maintest

}

redis stream 實現生產者消費者模式

test public void producer throws interruptedexception test public void consumer1 throws interruptedexception list msg jedis.xreadgroup groupname,consu...

生產者消費者 生產者與消費者模式

一 什麼是生產者與消費者模式 其實生產者與消費者模式就是乙個多執行緒併發協作的模式,在這個模式中呢,一部分執行緒被用於去生產資料,另一部分執行緒去處理資料,於是便有了形象的生產者與消費者了。而為了更好的優化生產者與消費者的關係,便設立乙個緩衝區,也就相當於乙個資料倉儲,當生產者生產資料時鎖住倉庫,不...

生產者消費者

using system using system.collections.generic using system.threading namespace gmservice foreach thread thread in producers q.exit console.read public...