深入理解Java并发工具:CountDownLatch和CyclicBarrier实战案例
在Java的多线程编程中,CountDownLatch和CyclicBarrier是两个非常重要的并发工具。它们主要用于控制多个线程的执行顺序。
- CountDownLatch
CountDownLatch是一种倒计时类型的对象,它的初始值至少为0。当一个线程等待某个事件发生(例如资源准备完毕)时,会将CountDownLatch的值减1。当所有需要等待的线程都完成了上述操作后,调用await()方法的线程才会继续执行。
实战案例:
import java.util.concurrent.CountDownLatch;
public class CountDownLatchExample {
private static final int NUM_THREADS = 5;
private static final int MAX_COUNT = NUM_THREADS * 2;
public static void main(String[] args) throws InterruptedException {
// 创建CountDownLatch对象,初始值为0
CountDownLatch countDownLatch = new CountDownLatch(NUM_THREADS);
// 创建并启动多个线程
for (int i = 1; i <= NUM_THREADS; i++) {
Thread workerThread = new Thread(() -> {
try {
// 线程执行的任务,模拟等待资源准备完成
countDownLatch.await(MAX_COUNT);
} catch (InterruptedException e) {
System.out.println("Thread " + i + " interrupted: " + e.getMessage());
}
}));
workerThread.start();
}
// 当CountDownLatch的值减到0时,执行以下操作
if (countDownLatch.getCount() == 0) {
System.out.println("All threads finished waiting.");
countDownLatch.countDown(); // 向所有等待线程发出计数为1的通知
}
}
}
在上述案例中,我们创建了一个CountDownLatch对象,模拟5个线程等待资源准备完成。当所有线程都完成了等待后,会执行一些特定操作。
还没有评论,来说两句吧...