概念
生產者消費者模式就是通過乙個容器來解決生產者和消費者的強耦合問題。
生產者和消費者彼此之間不直接通訊,而通過阻塞佇列來進行通訊,所以生產者生產完資料之後不用等待消費者處理,直接扔給阻塞佇列,消費者不找生產者要資料,而是直接從阻塞佇列裡取,阻塞佇列就相當於乙個緩衝區,平衡了生產者和消費者的處理能力。這個阻塞佇列就是用來給生產者和消費者解耦的。
基於blockingqueue的生產者消費者模型
blockingqueue 在多執行緒程式設計中阻塞佇列(blocking queue)是一種常用於實現生產者和消費者模型的資料結構。其與普通的佇列區別在於,當隊列為空時,從佇列獲取元素的操作將會被阻塞,直到佇列中被放入了元素;當佇列滿時,往佇列裡存放元素的操作也會被阻塞,直到有元素被從佇列中取出(以上的操作都是基於不同的執行緒來說的,執行緒在對阻塞佇列程序操作時會被阻塞)
阻塞佇列採用reentrantlock
詳情
產品
public class goods
}
中間容器
public class midcontainer
生產者
public class producer implements runnable catch (interruptedexception e)
synchronized (midcontainer.queue)
else
catch (interruptedexception e)}}
}}}
消費者
public class consumer implements runnable catch (interruptedexception e)
synchronized (midcontainer.queue)
else}}
}}
測試
public class test
for(
int j =
0; j < midcontainer.max_consumer; j++)}
}
生產者消費者 生產者與消費者模式
一 什麼是生產者與消費者模式 其實生產者與消費者模式就是乙個多執行緒併發協作的模式,在這個模式中呢,一部分執行緒被用於去生產資料,另一部分執行緒去處理資料,於是便有了形象的生產者與消費者了。而為了更好的優化生產者與消費者的關係,便設立乙個緩衝區,也就相當於乙個資料倉儲,當生產者生產資料時鎖住倉庫,不...
生產者 消費者模式
一 我哥們把資料存入redis快取區 生產者 二 我從緩衝器取資料,並作處理!消費者 詳細 如下 取訂單並判斷 redis new redis conn flag redis connect redis translate usefull host,redis translate usefull p...
生產者消費者模式
常見場景 某個模組負責產生資料,這些資料由另乙個模組來負責處理。產生資料的模組,就形象地稱為生產者 而處理資料的模組,就稱為消費者。該模式還需要有乙個緩衝區處於生產者和消費者之間,作為乙個中介。生產者把資料放入緩衝區,而消費者從緩衝區取出資料 緩衝區作用 1.解耦,生產者和消費者只依賴緩衝區,而不互...