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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

guava 并发同步_Google Guava –与Monitor同步

發(fā)布時間:2023/12/3 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 guava 并发同步_Google Guava –与Monitor同步 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

guava 并發(fā)同步

Google Guava項目是每個Java開發(fā)人員都應(yīng)該熟悉的庫的集合。 Guava庫涵蓋了I / O,集合,字符串操作和并發(fā)性。 在這篇文章中,我將介紹Monitor類。 Monitor是一種同步構(gòu)造,可以在使用ReentrantLock的任何地方使用。 隨時只有一個線程可以占用一個監(jiān)視器。 Monitor類具有進(jìn)入和離開操作,這些操作在語義上與ReentrantLock中的鎖定和解鎖操作相同。 此外,監(jiān)視器支持在布爾條件下等待。
比較Monitor和ReentrantLock

對于初學(xué)者來說,將Monitor和ReentrantLock進(jìn)行并排比較會很有幫助。

public class ReentrantLockSample {private List<String> list = new ArrayList<String>();private static final int MAX_SIZE = 10;private ReentrantLock rLock = new ReentrantLock();private Condition listAtCapacity = rLock.newCondition();public void addToList(String item) throws InterruptedException {rLock.lock();try {while (list.size() == MAX_SIZE) {listAtCapacity.await();}list.add(item);} finally {rLock.unlock();}} }

public class MonitorSample {private List<String> list = new ArrayList<String>();private static final int MAX_SIZE = 10;private Monitor monitor = new Monitor();private Monitor.Guard listBelowCapacity = new Monitor.Guard(monitor) {@Overridepublic boolean isSatisfied() {return (list.size() < MAX_SIZE);}};public void addToList(String item) throws InterruptedException {monitor.enterWhen(listBelowCapacity);try {list.add(item);} finally {monitor.leave();}} }

從示例中可以看到,兩者實際上具有相同數(shù)量的代碼行。 與ReentrantLock Condition相比, Monitor會在Guard對象周圍增加一些復(fù)雜性。 但是, Monitor addToList方法的清晰度遠(yuǎn)遠(yuǎn)不能彌補(bǔ)。 這可能只是我的個人喜好,但我一直發(fā)現(xiàn)

while(something==true){condition.await() }

有點(diǎn)尷尬。

使用指南

應(yīng)當(dāng)注意,返回void enter方法應(yīng)始終采用以下形式:

monitor.enter() try{...work.. }finally{monitor.leave(); }

并enter返回boolean方法,如下所示:

if(monitor.enterIf(guard)){try{...work..}finally{monitor.leave();} }else{.. monitor not available.. }


布爾條件

Monitor類上的enter方法太多,無法有效地完成一篇文章,所以我將挑選我的前三名,然后按照從最小阻塞到最大阻塞的順序進(jìn)行介紹。

  • tryEnterIf –線程將不等待進(jìn)入監(jiān)視器,僅在保護(hù)條件返回true時才進(jìn)入。
  • enterIf –線程將等待進(jìn)入監(jiān)視器,但前提是保護(hù)條件返回true。 還有enterIf方法簽名,這些簽名允許指定超時以及enterIfInterruptible版本。
  • enterWhen –線程將無限期等待監(jiān)視器和條件返回true,但可以被中斷。 同樣,也有用于指定超時的選項以及enterWhenUniterruptible版本。

  • 結(jié)論

    我還沒有機(jī)會在工作中使用Monitor,但是我可以看到布爾保護(hù)條件的粒度有用。 我已經(jīng)寫了一些基本的示例代碼和一個隨附的單元測試,以演示本文所涵蓋的一些功能。 它們在這里可用。 一如既往地歡迎您提出意見/建議。 在我的下一篇文章中,我將介紹Guava并發(fā)中的更多內(nèi)容。

    資源資源

    • 番石榴項目首頁
    • 監(jiān)控器API
    • 樣例代碼


    參考資料: Google Guava –我們的JCG合作伙伴 Bill Bejeck在“ 隨機(jī)編碼想法”博客上與Monitor進(jìn)行了同步 。

    翻譯自: https://www.javacodegeeks.com/2012/11/google-guava-synchronization-with-monitor.html

    guava 并發(fā)同步

    創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

    總結(jié)

    以上是生活随笔為你收集整理的guava 并发同步_Google Guava –与Monitor同步的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。