CountDownLatch结合线程池
时间: 2024-08-17 10:00:53 浏览: 44
CountDownLatch是Java并发工具包中的一个重要组件,用于在多个线程完成特定任务之后等待所有线程执行完毕。当调用CountDownLatch构造器并传递一个整数计数器时,这个计数器代表了线程的数量。每个线程在完成其任务后会调用`countDown()`方法,将计数器减一。当计数器变为0时,持有`await()`方法的所有线程会被唤醒并继续执行。
结合线程池使用时,通常会在线程池的工作线程完成某个阶段性的任务(例如处理一批数据或执行一个复杂的计算)之前创建一个CountDownLatch,然后在线程开始任务之前设置为对应的线程数量。这样,一旦所有线程完成了这些任务,就会触发CountDownLatch的信号,使得主线程或者其他依赖于这些线程完成工作的部分能够继续执行。
以下是一个简单的示例:
```java
// 创建一个固定大小的线程池和CountDownLatch
ExecutorService executor = Executors.newFixedThreadPool(5);
CountDownLatch latch = new CountDownLatch(5);
// 提交5个任务到线程池
for (int i = 0; i < 5; i++) {
Runnable worker = () -> {
// 执行具体任务
// ...
// 完成任务后调用countDown()
latch.countDown();
};
executor.execute(worker);
}
// 主线程等待所有工作线程完成后执行其他操作
latch.await();
// 当所有任务完成后,这里可以进行后续清理或统计等操作
executor.shutdown();
```
阅读全文