這篇文章主要介紹“java實現(xiàn)生產(chǎn)者消費者的實例代碼”,在日常操作中,相信很多人在java實現(xiàn)生產(chǎn)者消費者的實例代碼問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”java實現(xiàn)生產(chǎn)者消費者的實例代碼”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
目前成都創(chuàng)新互聯(lián)公司已為近千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、雅安服務(wù)器托管、網(wǎng)站托管、服務(wù)器托管、企業(yè)網(wǎng)站設(shè)計、通山網(wǎng)站維護(hù)等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
if只會判斷一次,而while一直會判斷
永遠(yuǎn)要使用notifyAll不要使用notify。
public class MyContainer1{ final private LinkedList lists = new LinkedList<>(); final private int MAX = 10; //最多10個元素 private int count = 0; //當(dāng)前有多少個 public synchronized void put(T t) { while(lists.size() == MAX) { //想想為什么用while而不是用if? try { this.wait(); //effective java } catch (InterruptedException e) { e.printStackTrace(); } } lists.add(t); ++count; this.notifyAll(); //通知消費者線程進(jìn)行消費 } public synchronized T get() { T t = null; while(lists.size() == 0) { try { this.wait(); //effective java } catch (InterruptedException e) { e.printStackTrace(); } } t = lists.removeFirst(); count --; this.notifyAll(); //通知生產(chǎn)者進(jìn)行生產(chǎn) return t; } public static void main(String[] args) { MyContainer1 c = new MyContainer1<>(); //啟動消費者線程 for(int i=0; i<10; i++) { new Thread(()->{ for(int j=0; j<5; j++) System.out.println(c.get()); }, "c" + i).start(); } try { TimeUnit.SECONDS.sleep(2); } catch (InterruptedException e) { e.printStackTrace(); } //啟動生產(chǎn)者線程 for(int i=0; i<2; i++) { new Thread(()->{ for(int j=0; j<25; j++) c.put(Thread.currentThread().getName() + " " + j); }, "p" + i).start(); } } }
到此,關(guān)于“java實現(xiàn)生產(chǎn)者消費者的實例代碼”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
分享名稱:java實現(xiàn)生產(chǎn)者消費者的實例代碼
文章轉(zhuǎn)載:http://weahome.cn/article/jioepi.html