CyclicBarrier And CountDownLatch

CountDownLatch和CyclicBarrier簡單比較:

CountDownLatch

CyclicBarrier

軟件包

java.util.concurrent

java.util.concurrent

適用情景

主線程等待多個工作線程結束

多個線程之間互相等待,直到所有線程達到一個障礙點(Barrier point)

主要方法

CountDownLatch(int count) (主線程調用)

初始化計數

CountDownLatch.await (主線程調用)

阻塞,直到等待計數爲0解除阻塞

CountDownLatch.countDown

計數減一(工作線程調用)

CyclicBarrier(int parties, Runnable barrierAction) //初始化參與者數量和障礙點執行Action,Action可選。由主線程初始化

CyclicBarrier.await() //由參與者調用

阻塞,直到所有線程達到屏障點

等待結束

各線程之間不再互相影響,可以繼續做自己的事情。不再執行下一個目標工作。

在屏障點達到後,允許所有線程繼續執行,達到下一個目標。可以重複使用CyclicBarrier

異常

如果其中一個線程由於中斷,錯誤,或超時導致永久離開屏障點,其他線程也將拋出異常。

其他

如果BarrierAction不依賴於任何Party中的所有線程,那麼在任何party中的一個線程被釋放的時候,可以直接運行這個Action。

If(barrier.await()==2)

{

//do action

}

發佈了59 篇原創文章 · 獲贊 14 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章