多线程<二>CountDownLatch的用法
时间: 2023-08-02 18:35:26 浏览: 58
CountDownLatch是Java并发包中一个非常有用的工具类,它可以用来协调多个线程之间的执行顺序。
CountDownLatch的用途非常广泛,可以用于多线程并发执行控制、线程等待、任务分发等场景。
使用CountDownLatch的步骤如下:
1. 创建一个CountDownLatch对象,并指定计数器的初始值;
2. 在主线程中创建多个子线程,并让它们执行任务;
3. 在每个子线程执行完任务后,调用CountDownLatch对象的countDown()方法,将计数器减1;
4. 在主线程中调用CountDownLatch对象的await()方法,等待所有子线程执行完任务。
下面是一个简单的示例代码:
```java
import java.util.concurrent.CountDownLatch;
public class CountDownLatchDemo {
public static void main(String[] args) throws InterruptedException {
int nThreads = 5;
CountDownLatch countDownLatch = new CountDownLatch(nThreads);
for (int i = 0; i < nThreads; i++) {
new Thread(() -> {
try {
// 模拟每个线程执行任务的时间
Thread.sleep((long) (Math.random() * 1000));
System.out.println(Thread.currentThread().getName() + " 执行完任务");
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
countDownLatch.countDown();
}
}).start();
}
countDownLatch.await();
System.out.println("所有子线程执行完任务");
}
}
```
在这个示例代码中,我们创建了5个子线程,并让它们分别执行一个模拟任务,执行完后调用countDown()方法将计数器减1。在主线程中调用await()方法等待所有子线程执行完任务,当计数器为0时,主线程继续执行输出“所有子线程执行完任务”。
总结一下,CountDownLatch是一个非常有用的工具类,可以用来协调多个线程之间的执行顺序,从而实现更加高效的多线程编程。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_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)