CountDownLatch和CyclicBarrier区别?
(1)CountDownLatch计数器只能使用一次,CyclicBarrier计数器可以使用reset方法重置。
(2)CountDownLatch,描述的是一个或N个线程等待其他线程的关系(等待完成某项操作,强调完成某项操作),CyclicBarrier,各个线程之间内部相互等待的关系。(所有的线程必须全部到达栅栏位置,才继续执行,强调线程)。
@Slf4j
public class CyclicBarrierExample1 {
private static CyclicBarrier barrier = new CyclicBarrier(5);
public static void main(String[] args) throws Exception {
ExecutorService executor = Executors.newCachedThreadPool();
for (int i = 0; i < 10; i++) {
final int threadNum = i;
Thread.sleep(1000);
executor.execute(
() -> {
try {
race(threadNum);
} catch (Exception e) {
log.error("exception", e);
}
});
}
executor.shutdown();
}
private static void race(int threadNum) throws Exception {
Thread.sleep(1000);
log.info("{} is ready", threadNum);
barrier.await();
log.info("{} continue", threadNum);
}
}
