CountDownLatch用法
时间: 2023-11-05 10:03:11 浏览: 77
CountDownLatch的使用
CountDownLatch是Java中的一个同步工具类,它可以让一个线程等待其他线程完成任务后再执行,也可以用于多线程任务的协调和控制。它的使用方法如下:
1. 创建CountDownLatch对象,并指定计数器的初始值。
```java
CountDownLatch latch = new CountDownLatch(3);
```
2. 在子线程中执行任务,并在任务完成后调用countDown()方法减少计数器的值。
```java
new Thread(() -> {
// 执行任务
// ...
latch.countDown();
}).start();
```
3. 在主线程中调用await()方法等待其他线程完成任务。
```java
try {
latch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
```
当计数器的值变为0时,await()方法会返回,主线程就可以继续执行后续任务了。
CountDownLatch也可以用于多线程任务的协调和控制。例如,当一个任务需要等待多个子任务完成后才能执行时,可以使用CountDownLatch来实现:
1. 创建CountDownLatch对象,并指定计数器的初始值为子任务的个数。
```java
CountDownLatch latch = new CountDownLatch(3);
```
2. 在子线程中执行子任务,并在任务完成后调用countDown()方法减少计数器的值。
```java
new Thread(() -> {
// 执行子任务1
// ...
latch.countDown();
}).start();
new Thread(() -> {
// 执行子任务2
// ...
latch.countDown();
}).start();
new Thread(() -> {
// 执行子任务3
// ...
latch.countDown();
}).start();
```
3. 在主线程中调用await()方法等待子任务完成。
```java
try {
latch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
// 所有子任务完成后执行主任务
// ...
```
当所有子任务完成后,计数器的值变为0,await()方法会返回,主线程就可以执行主任务了。
阅读全文