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
}