併發:CyclicBarrier和CountDownLatch的區別。
阿新 • • 發佈:2018-12-18
CountDownLatch的計數器只能使用一次,而CyclicBarrier的計數器可以使用reset()方法重置。所以CyclicBarrier能處理更為複雜的業務場景。例如,如果計算髮生錯誤,可以重置計數器,並讓執行緒重新執行一次。
CyclicBarrier還提供其他有用的方法,比如getNumberWaiting方法可以獲取CyclicBarrier阻塞的執行緒數量。isBroken()方法用來了解阻塞的執行緒是否被中斷。下面程式碼執行完之後會返回true,其中isBroken的使用程式碼如下所示。
public class Test { static CyclicBarrier c = new CyclicBarrier(2); public static void main(String[] args) { Thread thread = new Thread(new Runnable() { @Override public void run() { try { c.await(); } catch (InterruptedException | BrokenBarrierException e) { } } }); thread.start(); thread.interrupt(); try { c.await(); } catch (InterruptedException | BrokenBarrierException e) { System.out.println(c.isBroken()); } } }