生產者和消費者模式

2021-09-12 04:28:32 字數 1289 閱讀 5200

消費者和生產模式是典型的軟體應用場景,比如工廠生產出產品,先送到商店,消費者再到商店去買。

生產者不會每生產乙個就送到商店去,一般是生產一定數量的產品,比如生產數量為n時,再送到商店去,這樣減少來回運輸的成本。這樣當商店的n個產品賣完時,消費者再來買時需要等待(wait),當商店有n個產品未賣時,生產者需要停止生產,等待產品銷售,產品量小於n時再開始生產。

下面以**來實現上面的場景:

生產類:

/**

* 生產者

*/public class producer implements runnable

/*** 生產產品

*/public void produce(product p)

public void run()

}}

消費類:

/**

* 消費者

*/public class consumer implements runnable

/*** 購買產品

*/public product buy()

public void run() }

}

商店類:

/**

* 商店

*/public class shop catch (interruptedexception e)

} else

return _list.remove(_list.size()-1); }

/*** 採購產品

* @param p

*/public synchronized void purchase(product p) catch (interruptedexception e)

} else

_list.add(p);

}}

產品類:

/**

* 產品

*/public class product

public void setname(string name)

}

測試類:

public class processtest 

}

處理場景是這樣的,商店不停採購和銷售產品,但商店的庫存有限,只能存放定量產品,當商店庫存滿時,停止採購,此時生產者處於暫停狀態,直到商店庫存量小於最大值時恢復生產,消費者不停購買產品,當商店的產品庫存量為0時,消費者停止購買,處於等待狀態,等商店庫存量大於0時,再恢復購買。

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

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

生產者和消費者模式

一 建立個生產者類 package consumerandproducer author tanhw119214 version jdk1.8.0 171 date on 2018 8 2 16 57 public class producer implements runnable public ...

生產者 消費者模式

一 我哥們把資料存入redis快取區 生產者 二 我從緩衝器取資料,並作處理!消費者 詳細 如下 取訂單並判斷 redis new redis conn flag redis connect redis translate usefull host,redis translate usefull p...