新聞中心
今天就跟大家聊聊有關(guān)如何使用Lock和Condition來(lái)實(shí)現(xiàn)生產(chǎn)者消費(fèi)者,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

創(chuàng)新互聯(lián)公司是一家專(zhuān)注于成都網(wǎng)站制作、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)與策劃設(shè)計(jì),寧晉網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)公司做網(wǎng)站,專(zhuān)注于網(wǎng)站建設(shè)十余年,網(wǎng)設(shè)計(jì)領(lǐng)域的專(zhuān)業(yè)建站公司;建站業(yè)務(wù)涵蓋:寧晉等地區(qū)。寧晉做網(wǎng)站價(jià)格咨詢:18982081108
對(duì)比兩種方式,Condition的方式可以更加精確的指定哪些線程被喚醒。
public class MyContainer2{ final private LinkedList lists = new LinkedList<>(); final private int MAX = 10; //最多10個(gè)元素 private int count = 0; private Lock lock = new ReentrantLock(); //生產(chǎn)者的條件 private Condition producer = lock.newCondition(); //消費(fèi)者的條件 private Condition consumer = lock.newCondition(); public void put(T t) { try { lock.lock(); while(lists.size() == MAX) { //想想為什么用while而不是用if? producer.await(); } lists.add(t); ++count; consumer.signalAll(); //通知消費(fèi)者線程進(jìn)行消費(fèi) } catch (InterruptedException e) { e.printStackTrace(); } finally { lock.unlock(); } } public T get() { T t = null; try { lock.lock(); while(lists.size() == 0) { consumer.await(); } t = lists.removeFirst(); count --; producer.signalAll(); //通知生產(chǎn)者進(jìn)行生產(chǎn) } catch (InterruptedException e) { e.printStackTrace(); } finally { lock.unlock(); } return t; } public static void main(String[] args) { MyContainer2 c = new MyContainer2<>(); //啟動(dòng)消費(fèi)者線程 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(); } //啟動(dòng)生產(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(); } } }
看完上述內(nèi)容,你們對(duì)如何使用Lock和Condition來(lái)實(shí)現(xiàn)生產(chǎn)者消費(fèi)者有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。
分享文章:如何使用Lock和Condition來(lái)實(shí)現(xiàn)生產(chǎn)者消費(fèi)者
文章鏈接:http://fisionsoft.com.cn/article/pdcioi.html


咨詢
建站咨詢
