成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

CountdownLatch 和 CycliBarriar 有什么區別?

開發 前端
CountDownLatch的計數器只能使用一次。而CyclicBarrier的計數器可以使用reset() 方法重置。

 一位工作5年的小伙伴面試的時候,被問到這樣一個問題,說,CountdownLatch 和 CycliBarriar 有什么區別?這個對于很多人都會比較陌生,但是接觸過并發編程的小伙伴來說還是比較簡單的。

今天呢,我給大家分享一下我對這個問題的理解。

1、CountdownLatch

圖片

先來看CountDownLatch,它是一個組合詞。CountDown 的意思是 倒計時,Latch 的意思是 門閂 ,也被翻譯成發令槍。在JDK 注釋中是這樣的:

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

翻譯過來就是說,讓一個或多個線程持續等待,直到其他多線程執行的一組操作全部完成以后,這些等待的線程才會繼續執行。

就好比是,有多位選手參加一場百米賽跑,裁判員需要等待全部選手就緒,并且在同一起跑線上。然后,裁判會發出號令:“各就位,預備跑”,隨著發令槍響,所有選手才能全部起跑。在這個場景中,各位參賽選手就是線程,而裁判就是CountDownLatch。

我們在實際開發中,有以下兩個使用場景可以用CountDownLatch來實現:

圖片

(1)讓單個線程等待多個線程的場景。

比如,一個服務需要從多個遠程接口獲取數據,我們可以創建多個線程來分別調用遠程接口,等待所有遠程接口都獲得返回數據之后,主服務線程再往下繼續執行。像并發計算,結果匯總等等。

(2)讓多個線程等待的場景。

比如,模擬秒殺場景,讓一組線程同時等待,同時恢復執行,實現最大程度的并行性。

圖片

需要注意的是,當高并發請求時,Countdownlatch的await方法有可能會引起死鎖。

如果線程池中線程的數量較少,在高并發時會出現多個請求占用了全部的線程,但是每個請求又需要await()其他線程,被等待的線程拿不到線程資源無法執行,導致多個請求同時進入線程阻塞,最后形成死鎖。

當然,我們可以使用自定義線程池來擴大線程數量,并且建立線程池拒絕機制來解決死鎖問題。

2、CyclicBarrier

圖片

再來看 CyclicBarrier [?sa?kl?k] [?b?ri?],它也是一個組合詞。其中Cyclic 的意思是 循環 ,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.

圖片

翻譯過來總結為以下三點:

  1. CyclicBarrier 是一個同步輔助類,它允許一組線程相互等待直到所有線程都到達一個公共的屏障點。
  2. 在程序中有固定數量的線程,這些線程有時候必須等待彼此,這種情況下,使用 CyclicBarrier 很有幫助。
  3. 這個屏障之所以用循環修飾,是因為在所有的線程釋放彼此之后,這個屏障可以重復使用。

圖片

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

我們在實際開發中,CyclicBarrier可以用于多線程計算數據,最后合并計算結果的應用場景。

比如,需要計算N組人一年的平均工資,每組需要多個線程并行計算,計算完一組,再開始下一組,這樣就需要多輪并行計算。這個場景下,CyclicBarrier 比 CountDownLatch 更適合。

3、兩者區別

圖片

最后,總結一下CountDownLatch和CyclicBarrier的區別,從以下四個方面來分析:

  1. CountDownLatch的計數器只能使用一次。而CyclicBarrier的計數器可以使用reset() 方法重置。
  2. CyclicBarrier能處理更為復雜的業務場景,比如計算發生錯誤,可以結束阻塞,重置計數器,重新執行程序
  3. CyclicBarrier提供getNumberWaiting()方法,可以獲得CyclicBarrier阻塞的線程數量,還提供isBroken()方法,可以判斷阻塞的線程是否被中斷,等等。
  4. CountDownLatch會阻塞主線程,CyclicBarrier不會阻塞主線程,只會阻塞子線程。

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

責任編輯:姜華 來源: Tom彈架構
相關推薦

2024-05-27 00:40:00

2022-02-27 15:33:22

安全CASBSASE

2021-12-17 14:40:02

while(1)for(;;)語言

2021-05-16 14:26:08

RPAIPACIO

2024-03-05 18:59:59

前端開發localhost

2024-09-09 13:10:14

2022-08-02 08:23:37

SessionCookies

2020-03-09 20:56:19

LoRaLoRaWAN無線技術

2022-06-06 14:53:02

LoRaLoRaWAN

2022-09-08 18:38:26

LinuxWindowsmacOS

2020-11-09 14:07:53

PyQtQt編程

2023-12-15 09:21:17

ObjectJavaString

2022-08-31 08:33:54

Bash操作系統Linux

2022-08-22 07:06:32

MyBatisSQL占位符

2025-03-10 09:30:00

SpringJava開發

2016-12-07 19:55:33

大數據深度學習

2022-01-14 11:23:57

區塊鏈比特幣加密貨幣

2012-10-18 14:46:01

Windows RTWindows 8

2022-03-14 10:26:23

云計算物聯網

2013-07-30 13:35:12

methodfunction
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久精品一区二区三区四区 | 99爱在线观看 | 国产日韩欧美激情 | 精品1区 | 天天躁日日躁xxxxaaaa | 精品日韩一区二区三区av动图 | 中文在线一区 | 91久久精品日日躁夜夜躁国产 | 亚洲一区二区三区欧美 | 国产成人aⅴ | 欧美激情久久久 | 国产精品99久久久久久久久久久久 | 久草青青草 | 成人免费观看男女羞羞视频 | 国产一级淫片a直接免费看 免费a网站 | 99在线免费观看 | 亚洲精品成人网 | 秋霞a级毛片在线看 | 免费a级毛片在线播放 | 日本久久久一区二区三区 | 久久国产一区二区三区 | 99久久精品免费看国产四区 | 久草青青草 | 国产精品免费一区二区三区 | 国产一区二区三区在线看 | 天天看夜夜 | 久久久91 | 久久久久久久综合 | 亚洲免费人成在线视频观看 | 天天操天天射综合网 | 国产三级国产精品 | 精品欧美一区二区三区久久久 | 黄色国产视频 | 超碰在线久 | 国产精品一二区 | 91在线观看网址 | 久久高清 | 韩国av影院 | 久久com | 国产精品久久久久久久免费大片 | 色精品 |