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();
總結: