CyclicBarrier And CountDownLatch

LinvingCode發表於2017-02-28

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

}

相關文章