CountDownLatch和CyclicBarrier的區別

在網上看到很多人對於CountDownLatch和CyclicBarrier的區別簡單理解爲CountDownLatch是一次性的,而CyclicBarrier在調用reset之後還可以繼續使用。那如果只是這麼簡單的話,我覺得CyclicBarrier簡單命名爲ResetableCountDownLatch好了,顯然不是的。
我的理解是,要從他們的設計目的去看這兩個類。javadoc裏面的描述是這樣的。

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

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

可能是我的英語不夠好吧, 我感覺從這個javadoc裏面要準確理解他們的差異還是不容易的。
我的理解是

CountDownLatch : 一個線程(或者多個), 等待另外N個線程完成某個事情之後才能執行。   CyclicBarrier        : N個線程相互等待,任何一個線程完成之前,所有的線程都必須等待。
這樣應該就清楚一點了,對於CountDownLatch來說,重點是那個“一個線程”, 是它在等待, 而另外那N的線程在把“某個事情”做完之後可以繼續等待,可以終止。而對於CyclicBarrier來說,重點是那N個線程,他們之間任何一個沒有完成,所有的線程都必須等待。



CountDownLatch 是計數器, 線程完成一個就記一個, 就像 報數一樣, 只不過是遞減的.

而CyclicBarrier更像一個水閘, 線程執行就想水流, 在水閘處都會堵住, 等到水滿(線程到齊)了, 纔開始泄流.



作者: xumingming
網址: http://xumingming.sinaapp.com/215/countdownlatch-vs-cyclicbarrier/
發佈了42 篇原創文章 · 獲贊 3 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章