countdownlatch怎么用
时间: 2024-09-09 15:12:47 浏览: 53
JAVA多线程CountDownLatch使用详解
CountDownLatch是Java并发编程中一个常用的同步辅助类,它允许一个或多个线程等待,直到在其他线程中执行的一组操作完成。CountDownLatch的核心思想是计数器,它初始化时会设定一个初始的计数值,该计数值表示需要等待的事件的数量。
使用CountDownLatch的基本步骤如下:
1. 初始化:创建一个CountDownLatch对象,并设置一个初始计数值。
2. 等待:某些线程在执行前调用CountDownLatch的`await()`方法,这些线程会被阻塞,直到计数器的值减少到0。
3. 计数递减:其他线程在完成自己的任务后,通过调用`countDown()`方法来递减计数器的值。每调用一次`countDown()`,计数器减1。
4. 计数器归零:当计数器的值降至0时,所有在`await()`方法上阻塞的线程将被唤醒,继续执行后续操作。
使用CountDownLatch的一个典型场景是主线程等待一个或多个工作线程完成它们的任务。
下面是一个简单的代码示例:
```java
import java.util.concurrent.CountDownLatch;
public class CountDownLatchExample {
public static void main(String[] args) throws InterruptedException {
// 创建一个计数器为3的CountDownLatch对象
CountDownLatch latch = new CountDownLatch(3);
// 启动三个工作线程
new Thread(new Worker(latch)).start();
new Thread(new Worker(latch)).start();
new Thread(new Worker(latch)).start();
// 主线程等待所有工作线程完成
latch.await();
// 所有工作线程执行完毕,主线程继续执行
System.out.println("所有工作线程执行完毕,主线程继续执行。");
}
}
class Worker implements Runnable {
private final CountDownLatch latch;
Worker(CountDownLatch latch) {
this.latch = latch;
}
@Override
public void run() {
try {
// 模拟工作线程执行任务
System.out.println(Thread.currentThread().getName() + "开始工作");
Thread.sleep(1000); // 模拟耗时任务
System.out.println(Thread.currentThread().getName() + "完成工作");
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
// 工作线程完成任务后递减计数器
latch.countDown();
}
}
}
```
阅读全文