ThreadPoolExecutor CountDownLatch
时间: 2023-10-17 11:34:12 浏览: 92
CountDownLatch的使用
在提供的引用中没有直接提到CountDownLatch,但是我可以向您解释一下CountDownLatch是什么以及如何与ThreadPoolExecutor一起使用。
CountDownLatch是Java.util.concurrent包中的一个工具类。它可以用来控制线程的并发执行。CountDownLatch中包含一个计数器,当计数器的值减到零时,等待该计数器的线程将被释放。线程可以通过调用CountDownLatch的countDown()方法来递减计数器的值,而其他线程可以通过await()方法来等待计数器的值为零。
在与ThreadPoolExecutor一起使用时,可以使用CountDownLatch来等待所有线程完成任务后再执行操作。您可以创建一个CountDownLatch对象,并在每个线程完成任务时调用countDown()方法来递减计数器的值。然后,在您希望等待所有线程完成任务后执行操作的地方,调用await()方法来等待计数器值为零。
示例代码如下:
```java
// 创建一个CountDownLatch对象,计数器的值为线程的数量
CountDownLatch latch = new CountDownLatch(3);
// 创建线程池
ExecutorService executor = Executors.newFixedThreadPool(3);
for (int i = 0; i < 3; i++) {
// 向线程池提交任务
executor.execute(new Runnable() {
@Override
public void run() {
// 线程执行的任务...
// 执行完任务后调用countDown()方法递减计数器的值
latch.countDown();
}
});
}
try {
// 等待所有线程完成任务
latch.await();
// 所有线程完成任务后执行的操作...
} catch (InterruptedException e) {
// 处理中断异常
} finally {
// 关闭线程池
executor.shutdown();
}
```
这样,当所有线程完成任务后,latch.await()方法将返回,然后您可以执行其他操作。注意,这里创建了一个固定大小的线程池,其中包含3个线程,与CountDownLatch的计数器值相匹配。每个线程完成任务后会调用countDown()方法递减计数器的值,直到计数器值为零,await()方法才会返回。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [Java线程池ThreadPoolExecutor详解和CountDownLatch的使用](https://blog.csdn.net/weixin_43702146/article/details/125178953)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]
阅读全文