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()