final CountDownLatch countDownLatch = new CountDownLatch(EXECUTE_COUNT);
时间: 2024-07-27 17:00:39 浏览: 38
`CountDownLatch` 是 Java 中的一个并发工具类,它允许一个或多个线程等待其他线程完成特定操作后再继续执行。在这个例子中,`final CountDownLatch countDownLatch = new CountDownLatch(EXECUTE_COUNT);` 的作用是在多线程环境下控制同步。
`EXECUTE_COUNT` 是一个常量,表示有多个任务(线程)需要执行。创建 `CountDownLatch` 时,它的初始计数为 `EXECUTE_COUNT`。每个线程在执行完自己的任务后会调用 `countDownLatch.countDown()` 方法,这会使计数器减一。当计数器降为零时,所有之前调用 `await()` 方法等待的线程会被唤醒并继续执行。
下面是一个简单的示例:
```java
// 假设我们有五条任务要执行
final CountDownLatch executeLatch = new CountDownLatch(5);
// 创建五个线程来执行任务
ExecutorService executor = Executors.newFixedThreadPool(5);
for (int i = 0; i < 5; i++) {
Runnable worker = () -> {
try {
// 模拟任务执行
Thread.sleep(1000);
System.out.println("Task " + i + " executed");
} catch (InterruptedException e) {
e.printStackTrace();
}
// 当任务完成后,调用 countDownLatch.countDown()
executeLatch.countDown();
};
executor.execute(worker);
}
// 主线程等待所有任务完成
executeLatch.await(); // 等待直到所有线程执行完毕
executor.shutdown();
```
在上面的示例中,主线程通过 `await()` 调用来阻塞,直到所有子线程的任务执行完毕(即 `COUNTDownLatch` 计数器为零)。这样可以保证任务按照预期的顺序完成。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)