相信每個(gè)想深入了解多線程開發(fā)的Java開發(fā)者都會(huì)遇到CountDownLatch和CyclicBarrier,大家也在網(wǎng)上看到各種介紹原理,代碼的,以及他們區(qū)別(應(yīng)付面試)的,但是很少能講清楚:他們到底有啥作用,怎么用,應(yīng)用那些場(chǎng)景?為什么面試總會(huì)遇到?本文結(jié)合場(chǎng)景為大家加深理解。
官方解釋:

翻譯:
CountDownLatch是一個(gè)同步的輔助類,允許一個(gè)或多個(gè)線程,等待其他一組線程完成操作,再繼續(xù)執(zhí)行。
CyclicBarrier是一個(gè)同步的輔助類,允許一組線程相互之間等待,達(dá)到一個(gè)共同點(diǎn),再繼續(xù)執(zhí)行。
他們都是:Synchronization aid,我把它翻譯成同步輔助器,既然是輔助工具,怎么使用啊?哪些場(chǎng)景使用???
個(gè)人理解:CountDownLatch:我把他理解成倒計(jì)時(shí)鎖
場(chǎng)景還原:一年級(jí)期末考試要開始了,監(jiān)考老師發(fā)下去試卷,然后坐在講臺(tái)旁邊玩著手機(jī)等待著學(xué)生答題,有的學(xué)生提前交了試卷,并約起打球了,等到最后一個(gè)學(xué)生交卷了,老師開始整理試卷,貼封條,下班,陪老婆孩子去了。
補(bǔ)充場(chǎng)景:我們?cè)谕鍸OL英雄聯(lián)盟時(shí)會(huì)出現(xiàn)十個(gè)人不同加載狀態(tài),但是最后一個(gè)人由于各種原因始終加載不了100%,于是游戲系統(tǒng)自動(dòng)等待所有玩家的狀態(tài)都準(zhǔn)備好,才展現(xiàn)游戲畫面。推薦:Java進(jìn)階視頻資源
抽象圖:

每位乘客(線程)上車后,可用座位減1,直到為0,老司機(jī)就開始發(fā)車了。
個(gè)人理解:CyclicBarrier:可看成是個(gè)障礙,所有的線程必須到齊后才能一起通過這個(gè)障礙
場(chǎng)景還原:以前公司組織戶外拓展活動(dòng),幫助團(tuán)隊(duì)建設(shè),其中最重要一個(gè)項(xiàng)目就是全體員工(包括女同事,BOSS)在完成其他項(xiàng)目時(shí),到達(dá)一個(gè)高達(dá)四米的高墻沒有任何抓點(diǎn),要求所有人,一個(gè)不能少的越過高墻,才能繼續(xù)進(jìn)行其他項(xiàng)目。
抽象圖:
解放軍叔叔完美配合,一個(gè)都不能少,繼續(xù)完成任務(wù)。
我這里只是為了促進(jìn)大家更好地理解它們的應(yīng)用場(chǎng)景,詳細(xì)用法可以自行Google。
(感謝閱讀,希望對(duì)你所有幫助)
來源:blog.csdn.net/zzg1229059735/article/details/61191679