日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
CountdownLatch和CycliBarriar有什么區(qū)別?

 一位工作5年的小伙伴面試的時(shí)候,被問(wèn)到這樣一個(gè)問(wèn)題,說(shuō),CountdownLatch 和 CycliBarriar 有什么區(qū)別?這個(gè)對(duì)于很多人都會(huì)比較陌生,但是接觸過(guò)并發(fā)編程的小伙伴來(lái)說(shuō)還是比較簡(jiǎn)單的。

公司主營(yíng)業(yè)務(wù):網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站制作、移動(dòng)網(wǎng)站開(kāi)發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開(kāi)放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來(lái)驚喜。創(chuàng)新互聯(lián)推出新羅免費(fèi)做網(wǎng)站回饋大家。

今天呢,我給大家分享一下我對(duì)這個(gè)問(wèn)題的理解。

1、CountdownLatch

先來(lái)看CountDownLatch,它是一個(gè)組合詞。CountDown 的意思是 倒計(jì)時(shí),Latch 的意思是 門閂 ,也被翻譯成發(fā)令槍。在JDK 注釋中是這樣的:

A synchronization aid that allows one or more threads to wait until a set of operations being performed in other threads completes。

翻譯過(guò)來(lái)就是說(shuō),讓一個(gè)或多個(gè)線程持續(xù)等待,直到其他多線程執(zhí)行的一組操作全部完成以后,這些等待的線程才會(huì)繼續(xù)執(zhí)行。

就好比是,有多位選手參加一場(chǎng)百米賽跑,裁判員需要等待全部選手就緒,并且在同一起跑線上。然后,裁判會(huì)發(fā)出號(hào)令:“各就位,預(yù)備跑”,隨著發(fā)令槍響,所有選手才能全部起跑。在這個(gè)場(chǎng)景中,各位參賽選手就是線程,而裁判就是CountDownLatch。

我們?cè)趯?shí)際開(kāi)發(fā)中,有以下兩個(gè)使用場(chǎng)景可以用CountDownLatch來(lái)實(shí)現(xiàn):

(1)讓單個(gè)線程等待多個(gè)線程的場(chǎng)景。

比如,一個(gè)服務(wù)需要從多個(gè)遠(yuǎn)程接口獲取數(shù)據(jù),我們可以創(chuàng)建多個(gè)線程來(lái)分別調(diào)用遠(yuǎn)程接口,等待所有遠(yuǎn)程接口都獲得返回?cái)?shù)據(jù)之后,主服務(wù)線程再往下繼續(xù)執(zhí)行。像并發(fā)計(jì)算,結(jié)果匯總等等。

(2)讓多個(gè)線程等待的場(chǎng)景。

比如,模擬秒殺場(chǎng)景,讓一組線程同時(shí)等待,同時(shí)恢復(fù)執(zhí)行,實(shí)現(xiàn)最大程度的并行性。

需要注意的是,當(dāng)高并發(fā)請(qǐng)求時(shí),Countdownlatch的await方法有可能會(huì)引起死鎖。

如果線程池中線程的數(shù)量較少,在高并發(fā)時(shí)會(huì)出現(xiàn)多個(gè)請(qǐng)求占用了全部的線程,但是每個(gè)請(qǐng)求又需要await()其他線程,被等待的線程拿不到線程資源無(wú)法執(zhí)行,導(dǎo)致多個(gè)請(qǐng)求同時(shí)進(jìn)入線程阻塞,最后形成死鎖。

當(dāng)然,我們可以使用自定義線程池來(lái)擴(kuò)大線程數(shù)量,并且建立線程池拒絕機(jī)制來(lái)解決死鎖問(wèn)題。

2、CyclicBarrier

再來(lái)看 CyclicBarrier [?sa?kl?k] [?b?ri?],它也是一個(gè)組合詞。其中Cyclic 的意思是 循環(huán) ,Barrier 的意思是 屏障 ,又被翻譯成柵欄。在JDK 注釋中是這樣描述的:

A synchronization aid that allows a set of threads to all wait for each other to reach a common barrier point.

CyclicBarriers are useful in programs involving a fixed sized party of threads that must occasionally wait for each other.

The barrier is called cyclic because it can be re-used after the waiting threads are released.

翻譯過(guò)來(lái)總結(jié)為以下三點(diǎn):

  1. CyclicBarrier 是一個(gè)同步輔助類,它允許一組線程相互等待直到所有線程都到達(dá)一個(gè)公共的屏障點(diǎn)。
  2. 在程序中有固定數(shù)量的線程,這些線程有時(shí)候必須等待彼此,這種情況下,使用 CyclicBarrier 很有幫助。
  3. 這個(gè)屏障之所以用循環(huán)修飾,是因?yàn)樵谒械木€程釋放彼此之后,這個(gè)屏障可以重復(fù)使用。

從字面上理解的話,它的功能和CountdownLatch非常類似,也是等待所有參加比賽的選手全部就緒以后,才能開(kāi)始起跑。它是另外一種多線程并發(fā)控制工具,和CountdownLatch不同的是,CyclicBarrier可以重復(fù)使用。

我們?cè)趯?shí)際開(kāi)發(fā)中,CyclicBarrier可以用于多線程計(jì)算數(shù)據(jù),最后合并計(jì)算結(jié)果的應(yīng)用場(chǎng)景。

比如,需要計(jì)算N組人一年的平均工資,每組需要多個(gè)線程并行計(jì)算,計(jì)算完一組,再開(kāi)始下一組,這樣就需要多輪并行計(jì)算。這個(gè)場(chǎng)景下,CyclicBarrier 比 CountDownLatch 更適合。

3、兩者區(qū)別

最后,總結(jié)一下CountDownLatch和CyclicBarrier的區(qū)別,從以下四個(gè)方面來(lái)分析:

  1. CountDownLatch的計(jì)數(shù)器只能使用一次。而CyclicBarrier的計(jì)數(shù)器可以使用reset() 方法重置。
  2. CyclicBarrier能處理更為復(fù)雜的業(yè)務(wù)場(chǎng)景,比如計(jì)算發(fā)生錯(cuò)誤,可以結(jié)束阻塞,重置計(jì)數(shù)器,重新執(zhí)行程序
  3. CyclicBarrier提供getNumberWaiting()方法,可以獲得CyclicBarrier阻塞的線程數(shù)量,還提供isBroken()方法,可以判斷阻塞的線程是否被中斷,等等。
  4. CountDownLatch會(huì)阻塞主線程,CyclicBarrier不會(huì)阻塞主線程,只會(huì)阻塞子線程。

好了,以上就是我對(duì)CountdownLatch 和 CycliBarriar的理解。


本文名稱:CountdownLatch和CycliBarriar有什么區(qū)別?
當(dāng)前鏈接:http://www.dlmjj.cn/article/djjgeoh.html