countdownlatch 使用案例
时间: 2023-07-11 14:30:09 浏览: 47
CountDownLatch 是 Java 并发包中的一个工具类,可以用来协调多个线程之间的执行顺序。它的主要作用是让某个线程等待直到其他线程完成一系列操作后再执行。
以下是一个使用 CountDownLatch 的案例:
假设有一个任务,需要分成 3 个子任务并行执行,但是需要等待这三个子任务全部完成后才能执行主任务。这时可以使用 CountDownLatch 来实现:
```java
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class CountDownLatchExample {
public static void main(String[] args) throws InterruptedException {
int taskCount = 3;
CountDownLatch latch = new CountDownLatch(taskCount);
ExecutorService executor = Executors.newFixedThreadPool(taskCount);
for (int i = 0; i < taskCount; i++) {
executor.submit(new Task(latch));
}
latch.await();
System.out.println("All tasks have finished, now executing main task.");
executor.shutdown();
}
static class Task implements Runnable {
private CountDownLatch latch;
public Task(CountDownLatch latch) {
this.latch = latch;
}
@Override
public void run() {
try {
System.out.println("Task started: " + Thread.currentThread().getName());
Thread.sleep(1000);
System.out.println("Task finished: " + Thread.currentThread().getName());
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
latch.countDown();
}
}
}
}
```
在上面的例子中,我们创建了一个 CountDownLatch 对象并设置了计数器的初始值为 3。然后创建了一个线程池,并提交了 3 个任务。每个任务执行完毕后都会调用 CountDownLatch 的 countDown() 方法,使计数器减 1。当计数器为 0 时,await() 方法将返回,主任务就可以开始执行了。
阅读全文