CountDownLatch 线程阻塞,等其他线程

  • CountDownLatch countDownLatch = new CountDownLatch(2); 初始值
  • countDownLatch.await(); 阻塞
  • countDownLatch.countDown(); 减数,减到0就放开await(),

CyclicBarrier 更多是自己阻塞自己【CountDownLatch是一部分线程被cdl阻塞了,另外的线程来减数】

  • CyclicBarrier cyclicBarrier = new CyclicBarrier(3); 初始值
  • cyclicBarrier.await(); //所有线程,都阻塞,await到指定n,所有线程开始继续执行。

用CountDownLatch模拟CyclicBarrier,CountDownLatch更灵活。
cyclicBarrier.await(); = countDownLatch.countDown(); countDownLatch.await();

另外就是CyclicBarrier可以reset 重用。【达到0之后,可以不用reset自动重用】

CyclicBarrier的BrokenBarrierException

当Barrier还在await的时候,调用barrier.reset()