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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

三个好用的并发工具类

發(fā)布時間:2023/12/3 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 三个好用的并发工具类 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

轉(zhuǎn)載自??三個好用的并發(fā)工具類

以前的文章中,我們介紹了太多的底層原理技術以及新概念,本篇我們輕松點,了解下 Java 并發(fā)包下、基于這些底層原理的三個框架工具類。

它們分別是:

  • 信號量 Semaphore

  • 倒計時門栓 CountDownLatch

  • 屏障 CyclicBarrier

所以,既然是工具類,那么必然是離不開特定的場景的,于是相互之間沒有誰優(yōu)誰劣,只有誰更合適。

?

信號量 Semaphore

Semaphore 適用于什么樣的使用場景呢,我們舉個通俗的例子:

假如現(xiàn)在有一個停車場,里面有只十個停車位,當著十個停車位都被占用了,外面的車就不允許進入了,就必須在外面等著。出來一輛車才允許進去一輛車

這個場景不同于我們一般的并發(fā)場景,一般來說,我們的臨界資源只能允許一個線程進行訪問,其他線程都地等著。

但是,有一種場景是,臨界資源允許多個線程同時訪問,超過限定數(shù)量的外的線程得阻塞等待。

這種情境使用原始的那一套也是能實現(xiàn)的,但那叫「造輪子」,Java 并發(fā)框架下給我們提供了一個工具類,專門適用這種場景。

Semaphore 可以說是為上述這種場景而生的一個工具類,我們寫個 demo 實現(xiàn)上述邏輯:

執(zhí)行程序之后,你會看到:

?

你看,出來一個線程才允許進去一個線程,這就是 Semaphore。

semaphore 的內(nèi)部原理其實你去看源碼,你會發(fā)現(xiàn)和我們的 ReentrantLock 的實現(xiàn)是極其類似的,包括公平與非公平策略的支持,只不過,AQS 里面的 state 在前者的實現(xiàn)中,一般小于等于一(除非重入鎖),而后者的 state 則小于等于十,記錄的是剩余可用臨界資源數(shù)量。

所以,semaphore 天生就存在一個問題,如果某個線程重入了臨界區(qū),可用臨界資源的數(shù)量是否需要減少?

停車場一共十個停車位,一輛車進去并占有了一個停車位,過了一段時間,這個向管理員報告,我還要占用一個停車位,先不管他占兩個干啥,此時的管理員會同意嗎?

實際上,在 Java 這個管理員看來,已經(jīng)進入臨界區(qū)的線程是「老爺」,提出的要求都會優(yōu)先滿足,即便他自身占有的資源并沒有釋放。

所以,在 Semaphore 機制里,一個線程進入臨界區(qū)之后占用掉所有的臨界資源都是可能的。

?

倒計時門栓 CountDownLatch

下面我們來看看這個 CountDownLatch,名字聽起來挺高級,究竟提供了怎樣的功能呢?

有這么一個常見的場景,我們一起來看看:

大家日常經(jīng)常使用的拼多多,一件商品至少需要兩到三人拼團,商家才會發(fā)貨。

這里,我們不去研究它的商業(yè)模式,不管他是怎么實現(xiàn)盈利的,就這么一種場景,如果要用基本的并發(fā) API 來實現(xiàn),你可能會想到:

來一個線程阻塞一次,知道達到指定的數(shù)量后,全部喚醒

對,沒錯,CountDownLatch 內(nèi)部就是這樣實現(xiàn)的,輪子已經(jīng)幫你造好了,我們來看看該怎么實現(xiàn)上述的模型案例:

多運行幾次,你會發(fā)現(xiàn)結(jié)果不會錯,拼團的人先后順序可能不同,但商家一定是在三個人都準備好了之后才會發(fā)貨。

除此之外,它還有更多的應用,比如百米賽跑,只有當所有運動員都準備好了之后,裁判員才會吹響哨子,等等等等。

實現(xiàn)原理也基本和顯式鎖類似,不同點依然在于對 state 的控制,CountDownLatch 只判斷 state 是否等于零,不等于零就說明時機未到,阻塞當前線程。

而每一次的 countDown 方法調(diào)用都會減少一次倒計時資源,直至為零才喚醒阻塞的線程。

?

循環(huán)屏障 CyclicBarrier

CyclicBarrier 其實和 CountDownLatch 很像,我們先介紹完 CyclicBarrier,然后再和你一起去比較比較他倆的區(qū)別和相似點。

考慮這么一個場景:

公寓的班車總是在公寓樓下裝滿一車人之后,出發(fā)并開到地鐵站,接著再回來接下一班人。

這么一個場景,我們考慮該怎么實現(xiàn):

?

效果大概就是這個樣子:

CyclicBarrier 就像一個屏障,實例化的時候需要傳入兩個參數(shù),第一個參數(shù)指定我們的屏障最多攔截多少個線程后就打開屏障,第二個參數(shù)指明最后一個到達屏障的線程需要額外做的操作。

一般而言,最后一個線程到達屏障后,屏障將會打開,釋放前面所有的線程,并在最后重新關上屏障。

CyclicBarrier 只需要用到一個 await 就可以完成所有的功能,我們總結(jié)下該方法的實現(xiàn)邏輯:

  • 首先,減少一次可用資源數(shù)量

  • 如果可用資源數(shù)為零,則說明自己是最后一個線程,于是會執(zhí)行我們傳入的額外操作,喚醒所有已經(jīng)到達在等待的線程,并重新開啟一個屏障計數(shù)。

  • 否則說明自己不是最后一個線程,于是將自身線程在一個循環(huán)當中阻塞到一個條件隊列上

  • 好了,看完 CyclicBarrier 你會發(fā)現(xiàn),它真的很類似我們的倒計時門栓,下面我們就來闡述他倆的區(qū)別與聯(lián)系。

    ?

    第一個區(qū)別

    倒計時門栓 CountDownLatch 一旦被打開后就不能再次合上,也是說只要被調(diào)用了足夠次數(shù)的 countDown,await 方法就會失效,它是一次性的。

    CyclicBarrier 是循環(huán)發(fā)生的,當最后一個線程到達屏障,會優(yōu)先重置屏障計數(shù),屏障再次開啟攔截阻隔。

    ?

    第二個區(qū)別

    CountDownLatch 是計數(shù)器, 線程來一個就記一個,此期間不阻塞線程,當達到指定數(shù)量之后才會去喚醒外部等待的線程,也就是說外部是有一個乃至多個線程等待一個條件滿足之后才能繼續(xù)執(zhí)行,而這個條件就是滿足一定數(shù)量的線程,這樣才能激活當前外部線程的繼續(xù)執(zhí)行。

    CyclicBarrier 像一個柵欄,來一個線程阻塞一個,直到阻塞了指定數(shù)量的線程后,一次性全部激活,讓他們同時執(zhí)行,像一個百米沖刺一樣。

    ?

    最后的最后

    好了,以上就是我們 Java 并發(fā)包下面比較好用的三個工具類,其中前兩個的底層實現(xiàn)幾乎完全依賴顯式鎖的原理方法,后一個則是使用的顯式鎖加條件變量重新造的輪子,都是非常好用的工具!

    除此之外還要說一點的是,整個并發(fā)這塊內(nèi)容,基本核心的東西我們都已經(jīng)介紹完了,共計十四篇文章,從基本的線程概念,到鎖原理,到線程池,再到異步任務,自認為總結(jié)的足夠細致了,不知道你了解了多少呢?

    記不住沒關系,我也為你提供了一份思維導圖的總結(jié),羅列了上述基本的內(nèi)容,你可以對照著進行回顧,同時也歡迎你私信我討論探究。

    總結(jié)

    以上是生活随笔為你收集整理的三个好用的并发工具类的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

    主站蜘蛛池模板: 免费成人看视频 | 永久免费看mv网站入口78 | 69久久夜色精品国产69 | 日本99视频 | 双乳被四个男人吃奶h文 | 蜜桃色av| 俄罗斯美女一级爱片 | 秋霞免费av | 亚洲精品97久久中文字幕无码 | 日韩一级理论片 | 在线香蕉视频 | 日本中文字幕观看 | 黑料福利| 成人毛毛片 | 丰满人妻一区二区三区大胸 | 黄色在线不卡 | 午夜网站在线观看 | 一区二区三区四区视频在线观看 | 波多野结衣三级视频 | 久久视频免费在线观看 | 91日韩在线视频 | 亚洲在线一区二区三区 | www.4hu95.com四虎 极品在线视频 | 九久久久久 | 日本我不卡| 91亚洲欧美激情 | 波多野结衣视频免费看 | 国产女人水真多18毛片18精品 | www日韩精品 | 免费精品国产 | 人妻互换一区二区激情偷拍 | 精品人妻午夜一区二区三区四区 | 成人免费片库 | 精品久久视频 | 免费成人国产 | 精品一区二区三区四 | 欧美有码视频 | 成人午夜影院在线观看 | jizz俄罗斯| 先锋av资源在线 | 香蕉视频ap | 清冷学长被爆c躁到高潮失禁 | japanese24hdxxxx中文字幕 | 农村妇女毛片精品久久久 | 国产三级在线观看完整版 | 亚洲av无码专区国产乱码不卡 | 欧美黄色小说视频 | 久久久久亚洲精品 | 国产伦精品一区二区三区视频黑人 | avtt中文字幕 | 丰满人妻一区二区三区免费 | 成人深夜福利视频 | 麻豆精品久久久久久久99蜜桃 | 中文字幕高清在线免费播放 | 神马午夜嘿嘿 | 一卡二卡久久 | aaa在线播放 | 精品国产乱码久久久久久影片 | 在线播放你懂得 | 精品国产aⅴ一区二区三区东京热 | 在线观看国产免费av | 欧美日韩国产一区 | 理论毛片 | 久久久亚洲精品无码 | a√天堂在线 | 国产视频久久久久久久 | 日本高清黄色 | 精品人人妻人人澡人人爽牛牛 | 亚洲自拍偷拍精品 | 日韩黄色免费视频 | 欧美日韩亚洲系列 | 亚洲视频精品在线观看 | 99操| 德国性经典xxxx性hd | 超碰夫妻 | 黄色小说网站在线观看 | 久久婷五月 | 午夜精品久久久久久久91蜜桃 | 91青草视频 | 国产欧美激情视频 | 欧美在线一二三四区 | 香蕉视频网页 | 中文字幕久久熟女蜜桃 | 欧美一区二区在线看 | 叶山小百合av一区二区 | 欧美成人免费看 | 人人爽人人爽人人片av | 超碰人人人人人人人 | 国产九一精品 | 韩国伦理片观看 | 狠狠的干狠狠的操 | 中文字幕亚洲乱码熟女一区二区 | 成人手机看片 | 久草视频在线看 | 色屁屁www影院免费观看入口 | jizz内谢中国亚洲jizz | 欧美精品久久久久久久多人混战 | 日韩三级在线 | 久久中文字幕av |