CountDownLatch类解析
时间: 2023-07-22 12:19:46 浏览: 104
CountDownLatch是Java多线程并发包(java.util.concurrent)中的一个同步辅助类,用于控制线程等待其他线程完成执行之后再继续执行。它可以让某个线程等待其他线程完成各自的工作后再执行,可以用于多线程之间的协调。
CountDownLatch有一个计数器,初始化为一个正整数,每当一个线程完成了自己的任务后,计数器的值就会减1。当计数器的值为0时,表示所有线程都已经完成了任务,此时等待中的线程就可以继续执行。
CountDownLatch有两个主要方法:
1. countDown()方法:将计数器减1,表示一个线程已经完成了任务。
2. await()方法:等待计数器达到0,表示所有线程都已经完成了任务。
下面是一个简单的示例代码,其中有4个线程需要完成各自的任务,主线程需要等待这4个线程全部完成后才能继续执行。
```java
import java.util.concurrent.CountDownLatch;
public class CountDownLatchDemo {
public static void main(String[] args) throws InterruptedException {
final int THREAD_COUNT = 4;
final CountDownLatch latch = new CountDownLatch(THREAD_COUNT);
for (int i = 0; i < THREAD_COUNT; i++) {
new Thread(() -> {
// 模拟线程执行任务
try {
Thread.sleep((long) (Math.random() * 1000));
System.out.println(Thread.currentThread().getName() + " 执行完毕");
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
// 每个线程执行完毕后计数器减1
latch.countDown();
}
}).start();
}
// 主线程等待所有线程执行完毕
latch.await();
System.out.println("所有线程执行完毕");
}
}
```
上述代码中,主线程调用了await()方法,等待所有线程执行完毕后才会继续执行。每个线程执行完毕后会调用countDown()方法,计数器减1。当计数器的值为0时,主线程就可以继续执行了。
阅读全文