java多執行緒初探(零)生產者消費者模式 執行緒通訊

2021-08-22 04:49:42 字數 1994 閱讀 7463

測試類

package gcc.twothreadtransdata.producerandconsumer;

import org.slf4j.logger;

import org.slf4j.logge***ctory;

/** * 多個執行緒之間通訊

* 消費者生產者模式

* 多個生產者和消費者

* 流程:

* 多個執行緒(生產者,消費者)公用一把鎖

* 本例設定了兩個生產者執行緒和兩個消費者執行緒

* 啟動執行緒,run方法內迴圈呼叫生產和消費方法

* 無資料,生產,notifyall喚醒所有wait等待(不管是消費者的還是生產者的)

* 有資料,不生產,wait等待

* 有資料,消費,資料置空,notifyall喚醒所有wait等待

* 無資料,不消費,wait等待

*/public class testpcmodel

/*thread.sleep(2000);

thread threadarray = new thread[thread.currentthread().getthreadgroup().activecount()];

thread.currentthread().getthreadgroup().enumerate(threadarray);

for (int i = 0; i 生產者類

package gcc.twothreadtransdata.producerandconsumer;

import org.slf4j.logger;

import org.slf4j.logge***ctory;

public class producer

public void setvalue()

logger.info("開始生產:"+thread.currentthread().getname());

string value=system.currenttimemillis()+"--"+system.nanotime();

valueobject.value=value;

lock.notifyall();

}} catch (interruptedexception e)

}}

消費者類

package gcc.twothreadtransdata.producerandconsumer;

import org.slf4j.logger;

import org.slf4j.logge***ctory;

public class consumer

public void getvalue()

logger.info("開始消費:"+thread.currentthread().getname());

valueobject.value="";

lock.notifyall();

}} catch (interruptedexception e)

}}

生產者執行緒

package gcc.twothreadtransdata.producerandconsumer;

public class threadp extends thread

public void run()

}}

消費者執行緒

package gcc.twothreadtransdata.producerandconsumer;

public class threadc extends thread

public void run()

}}

輔助類

package gcc.twothreadtransdata.producerandconsumer;

public class valueobject

Java多執行緒14 生產者 消費者模型

什麼是生產者 消費者模型 一種重要的模型,基於等待 通知機制。生產者 消費者模型描述的是有一塊緩衝區作為倉庫,生產者可將產品放入倉庫,消費者可以從倉庫中取出產品,生產者 消費者模型關注的是以下幾個點 生產者 模型作為一種重要的模型,它的優點在於 利用wait notify 實現生產者 消費者模型 既...

Java多執行緒基礎 8 生產者 消費者和佇列

利用wait 和notify 實現任務間的協同合作其實是一種非常低階的方式,我們還可以使用同步佇列來解決任務協作問題,blockingqueue在任何時刻都只允許乙個任務插入或者移除佇列,如果消費者試圖從佇列中獲取元素,而此時該隊列為空,那麼佇列可掛起消費者,當佇列內有元素時再恢復消費者任務。比wa...

多執行緒通訊(二)生產者 消費者模式

生產者 消費者模式其原理是基於wait notify實現的。通過 更能便於理解,廢話不多說,上 生成者和消費者一對一模式 生產者public class producer public void buildproduct 生產產品並通知消費者 thread.sleep 1000 system.out...