日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java线程系列---condition的讲解

發布時間:2025/7/25 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java线程系列---condition的讲解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? Condition 將 Object 監視器方法(wait、notify 和notifyAll)分解成截然不同的對象,以便通過將這些對象與任意 Lock 實現組合使用,為每個對象提供多個等待 set (wait-set)。其中,Lock 替代了 synchronized 方法和語句的使用,Condition 替代了 Object 監視器方法的使用。

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

? ? Condition 實例實質上被綁定到一個鎖定上。要為特定 Lock 實例獲得 Condition 實例,請使用其 newCondition() 方法。

? ? ? ?作為一個示例,假定有一個綁定的緩沖區,它支持 put 和 take 方法。如果試圖在空的緩沖區上執行take 操作,則在某一個項變得可用之前,線程將一直阻塞;如果試圖在滿的緩沖區上執行 put 操作,則在有空間變得可用之前,線程將一直阻塞。我們喜歡在單獨的等待 set 中保存put 線程和 take 線程,這樣就可以在緩沖區中的項或空間變得可用時利用最佳規劃,一次只通知一個線程。可以使用兩個 Condition 實例來做到這一點。

class BoundedBuffer {

final Lock lock = new ReentrantLock();

final Condition notFull = lock.newCondition();

final Condition notEmpty = lock.newCondition();

final Object[] items = new Object[100];?

? int putptr, takeptr, count;?

? ? ? ? public void put(Object x) throws InterruptedException {

? ? ? ? ? ? ?lock.lock();

? ? ? ? ? ? ?try {?

? ? while (count == items.length) notFull.await();

items[putptr] = x;?

?if (++putptr == items.length)

? ? ? ? ?putptr = 0; ++count;

? ? ? ? notEmpty.signal();?

?}?

? finally {

? ? ? lock.unlock();?

?} }?

? public Object take() throws InterruptedException {?

lock.lock();?

?try {?

? ? ? ?while (count == 0)?

? ? ? ? ? ? notEmpty.await();

? ? ? Object x = items[takeptr];?

? ? ? if (++takeptr == items.length)?

? ? takeptr = 0;?

--count;?

? ? notFull.signal();?

? ? return x;

}

? finally {?

?lock.unlock();?

?} } }

轉載于:https://www.cnblogs.com/javaTest/archive/2012/06/27/2589090.html

總結

以上是生活随笔為你收集整理的java线程系列---condition的讲解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。