CountDownLatch用法
时间: 2023-10-14 12:26:12 浏览: 63
CountDownLatch是Java并发包中的一个类,用于协调多个线程之间的同步操作。它可以让一个或多个线程等待一个或多个其他线程完成它们的工作后再继续执行。
使用CountDownLatch一般分为两个步骤:
1. 创建CountDownLatch对象并设置它的计数器初始值,该值表示需要等待的线程数。
2. 在需要等待的线程中调用CountDownLatch的await()方法,在完成工作的线程中调用countDown()方法来减少计数器的值,直到计数器的值为0时,等待线程才会继续执行。
例如,下面的代码演示了如何使用CountDownLatch来等待多个线程完成它们的工作:
```java
import java.util.concurrent.CountDownLatch;
public class CountDownLatchExample {
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(new Worker(latch));
t.start();
}
latch.await(); // 等待所有线程完成工作
System.out.println("All workers have finished.");
}
static class Worker implements Runnable {
private final CountDownLatch latch;
public Worker(CountDownLatch latch) {
this.latch = latch;
}
@Override
public void run() {
try {
// 模拟工作
Thread.sleep((long) (Math.random() * 1000));
System.out.println(Thread.currentThread().getName() + " has finished its work.");
} catch (InterruptedException e) {
// ignore
} finally {
latch.countDown(); // 工作完成,计数器减一
}
}
}
}
```
上面的代码创建了5个工作线程,它们会随机休眠一段时间后输出自己的名字表示工作完成。主线程调用latch.await()方法等待所有工作线程完成工作,当计数器的值为0时,主线程输出“All workers have finished.”表示所有工作线程都已完成工作。
阅读全文