countdownlatch的应用
时间: 2024-03-08 22:44:23 浏览: 60
CountDownLatch的使用
CountDownLatch是Java并发包中的一个工具类,它可以用于控制多个线程的执行顺序。它的主要作用是让某个线程等待其他线程完成后再继续执行。
CountDownLatch的应用场景有很多,其中一个典型的应用场景是主线程等待多个子线程全部完成后再继续执行。具体的使用步骤如下:
1. 创建一个CountDownLatch对象,并指定计数器的初始值,该值表示需要等待的线程数量。
2. 在主线程中调用CountDownLatch的await()方法,使主线程等待。
3. 在每个子线程中,当子线程完成自己的任务后,调用CountDownLatch的countDown()方法,将计数器减1。
4. 当计数器减到0时,主线程被唤醒,继续执行。
下面是一个简单的示例代码:
```java
import java.util.concurrent.CountDownLatch;
public class CountDownLatchExample {
public static void main(String[] args) throws InterruptedException {
int threadCount = 5;
CountDownLatch latch = new CountDownLatch(threadCount);
for (int i = 0; i < threadCount; i++) {
Thread thread = new Thread(new Worker(latch));
thread.start();
}
latch.await();
System.out.println("All workers have finished their tasks.");
}
static class Worker implements Runnable {
private final CountDownLatch latch;
public Worker(CountDownLatch latch) {
this.latch = latch;
}
@Override
public void run() {
// 模拟子线程执行任务
try {
Thread.sleep(1000);
System.out.println("Worker finished its task.");
} catch (InterruptedException e) {
e.printStackTrace();
}
latch.countDown();
}
}
}
```
在上面的示例中,我们创建了5个子线程,并让主线程等待这5个子线程全部完成后再继续执行。每个子线程执行完任务后,调用了CountDownLatch的countDown()方法,将计数器减1。当计数器减到0时,主线程被唤醒,输出"All workers have finished their tasks."。
通过CountDownLatch,我们可以实现多个线程之间的协同工作,确保某些线程在其他线程完成任务后再继续执行。
阅读全文