countdownlatch用法
时间: 2023-07-08 16:06:25 浏览: 101
CountDownLatch是Java并发包中的一个工具类,它可以让一个或多个线程等待其他线程完成操作后再继续执行,通常用于协调多个线程之间的同步操作。
CountDownLatch的使用步骤如下:
1. 创建CountDownLatch对象,指定计数器的初始值,表示需要等待的线程个数。
2. 在需要等待的线程中,调用CountDownLatch的await()方法,等待计数器为0。
3. 在需要等待的线程执行完任务后,调用CountDownLatch的countDown()方法,将计数器减1。
4. 当计数器减为0时,所有等待的线程将被唤醒,继续执行。
下面是CountDownLatch的一个简单例子:
```java
import java.util.concurrent.CountDownLatch;
public class CountDownLatchDemo {
public static void main(String[] args) throws InterruptedException {
int nThreads = 5;
CountDownLatch latch = new CountDownLatch(nThreads);
for (int i = 0; i < nThreads; i++) {
Thread t = new Thread(() -> {
try {
// 模拟每个线程执行一段耗时的任务
Thread.sleep((long) (Math.random() * 1000));
System.out.println(Thread.currentThread().getName() + " finished");
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
// 执行完任务后,计数器减1
latch.countDown();
}
});
t.start();
}
// 等待所有线程执行完毕
latch.await();
System.out.println("All threads finished");
}
}
```
上述示例中,我们创建了5个线程,每个线程执行一段随机时长的任务,并在最后调用countDown()方法将计数器减1。主线程通过await()方法等待所有线程执行完毕后,输出"All threads finished"表示程序执行结束。
阅读全文