色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術文章
文章詳情頁

Java Condition條件變量提高線程通信效率

瀏覽:19日期:2022-08-22 11:42:29

條件(也稱為條件隊列 或條件變量)為線程提供了一個含義,以便在某個狀態條件現在可能為 true 的另一個線程通知它之前,一直掛起該線程(即讓其“等待”)。因為訪問此共享狀態信息發生在不同的線程中,所以它必須受保護,因此要將某種形式的鎖與該條件相關聯。等待提供一個條件的主要屬性是:以原子方式 釋放相關的鎖,并掛起當前線程,就像 Object.wait 做的那樣

在Condition中,用await()替換wait(),用signal()替換notify(),用signalAll()替換notifyAll(),傳統線程的通信方式,Condition都可以實現。

條件變量類似JDK1.4或以前版本中的 Object.wait(); Object.notify(); Object.notifyAll();

值得注意的是當condition.await()時,隱式的將條件變量關聯的Lock解鎖,而使其他線程有機會獲得Lock,而檢查條件,并在條件滿足時,等待在條件變量上。

示例代碼,ArrayBlockingQueue源碼摘?。?/p>

/** Main lock guarding all access */private final ReentrantLock lock;/** Condition for waiting takes */private final Condition notEmpty;/** Condition for waiting puts */private final Condition notFull;/** * Inserts the specified element at the tail of this queue, waiting * for space to become available if the queue is full. * * @throws InterruptedException {@inheritDoc} * @throws NullPointerException {@inheritDoc} */public void put(E e) throws InterruptedException { if (e == null) throw new NullPointerException(); final E[] items = this.items; final ReentrantLock lock = this.lock; lock.lockInterruptibly(); try { try { while (count == items.length) notFull.await(); } catch (InterruptedException ie) { notFull.signal(); // propagate to non-interrupted thread throw ie; } insert(e); } finally { lock.unlock(); }}public E take() throws InterruptedException { final ReentrantLock lock = this.lock; lock.lockInterruptibly(); try { try { while (count == 0) notEmpty.await(); } catch (InterruptedException ie) { notEmpty.signal(); // propagate to non-interrupted thread throw ie; } E x = extract(); return x; } finally { lock.unlock(); }}

有多個線程往里面存數據和從里面取數據,其隊列(先進先出后進后出)能緩存的最大數值是capacity,多個線程間是互斥的,當緩存隊列中存儲的值達到capacity時,將寫線程阻塞,并喚醒讀線程,當緩存隊列中存儲的值為0時,將讀線程阻塞,并喚醒寫線程這就是多個Condition的強大之處,假設緩存隊列中已經存滿,那么阻塞的肯定是寫線程,喚醒的肯定是讀線程,相反,阻塞的肯定是讀線程,喚醒的肯定是寫線程,那么假設只有一個Condition會有什么效果呢,緩存隊列中已經存滿,這個Lock不知道喚醒的是讀線程還是寫線程了,如果喚醒的是讀線程,皆大歡喜,如果喚醒的是寫線程,那么線程剛被喚醒,又被阻塞了,這時又去喚醒,這樣就浪費了很多時間!

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
主站蜘蛛池模板: 中美日韩在线网免费毛片视频 | 黄色网址网站 | 国产成人精品福利网站在线 | 制服丝袜在线视频香蕉 | 国产精品11p | 欧美毛片a级毛片免费观 | 老司机亚洲精品影院 | 成人在线91| 国产精品视_精品国产免费 国产精品视频久 | 人人操美女| 欧美成人极品怡红院tv | 亚洲国产福利精品一区二区 | 另类专区欧美 | 性欧美videos 精品 | 免费人成在线 | 午夜剧场福利社 | 国产高清免费在线 | 91久久国产成人免费观看资源 | 成人69视频在线观看免费 | 很黄很色的摸下面的视频 | 国产成人综合一区精品 | 自拍 欧美 在线 综合 另类 | 欧美日韩一区二区综合 | 欧美一级片网址 | 国产一区二区三区手机在线观看 | 国产精品久久久久久爽爽爽 | 久久精品在 | 在线免费观看色 | 日本一级爽毛片在线看 | 欧美午夜免费观看福利片 | 在线看a级片 | 国产在线播放不卡 | 亚洲夜色夜色综合网站 | 一区二区3区免费视频 | 久久99久久精品免费思思 | 国产成人免费片在线观看 | 日韩一级片视频 | 国产成a人片在线观看视频 国产成版人视频网站免费下 | 日本在线视频观看 | 午夜久久网 | 久久国产免费一区 |