CountDownLatch和CyclicBarrier都是Java并发库中的同步辅助工具,它们都可以用来控制多个线程之间的执行顺序,但它们之间存在一些关键区别:
示例代码:
CountDownLatch latch = new CountDownLatch(3);
new Thread(() -> {
// 执行任务
latch.countDown();
}).start();
new Thread(() -> {
// 执行任务
latch.countDown();
}).start();
new Thread(() -> {
// 执行任务
latch.countDown();
}).start();
latch.await(); // 等待所有线程完成任务
示例代码:
CyclicBarrier barrier = new CyclicBarrier(3);
new Thread(() -> {
// 执行任务
try {
barrier.await(); // 等待其他线程
} catch (InterruptedException | BrokenBarrierException e) {
e.printStackTrace();
}
}).start();
new Thread(() -> {
// 执行任务
try {
barrier.await(); // 等待其他线程
} catch (InterruptedException | BrokenBarrierException e) {
e.printStackTrace();
}
}).start();
new Thread(() -> {
// 执行任务
try {
barrier.await(); // 等待其他线程
} catch (InterruptedException | BrokenBarrierException e) {
e.printStackTrace();
}
}).start();
总结: