java countdownlatch用法
时间: 2023-07-08 11:06:26 浏览: 116
CountDownLatch是Java并发包中提供的一种同步工具类,它允许一个或多个线程等待其他线程完成操作后再执行。CountDownLatch内部维护着一个计数器,该计数器被初始化为一个正整数,表示需要等待的操作数量。每调用一次CountDownLatch的countDown()方法,计数器的值减1,当计数器的值减为0时,所有等待该计数器的线程将被唤醒。
下面是CountDownLatch的使用方法:
1. 创建CountDownLatch对象,并指定计数器的值。
```java
CountDownLatch latch = new CountDownLatch(3);
```
2. 在需要等待的线程中调用await()方法,使线程等待。
```java
try {
latch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
```
3. 在执行完成的线程中调用countDown()方法,使计数器的值减1。
```java
latch.countDown();
```
4. 可以在主线程中等待所有线程完成后再执行其他操作。
```java
try {
latch.await();
System.out.println("所有线程执行完成");
} catch (InterruptedException e) {
e.printStackTrace();
}
```
下面是完整的示例代码:
```java
import java.util.concurrent.CountDownLatch;
public class CountDownLatchDemo {
public static void main(String[] args) {
CountDownLatch latch = new CountDownLatch(3);
new Thread(() -> {
System.out.println("线程1执行");
latch.countDown();
}).start();
new Thread(() -> {
System.out.println("线程2执行");
latch.countDown();
}).start();
new Thread(() -> {
System.out.println("线程3执行");
latch.countDown();
}).start();
try {
latch.await();
System.out.println("所有线程执行完成");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
```
注意:CountDownLatch计数器的初始值必须大于0,否则调用await()方法会立即返回。如果计数器的值已经减为0,再调用countDown()方法也不会有任何效果。
阅读全文