java中CountDownLatch使用
时间: 2023-10-13 16:19:43 浏览: 124
CountDownLatch 是一个同步工具类,在多线程环境中常常用于控制线程的执行顺序或者等待某个事件的发生。它的主要作用是让一组线程等待某个事件的发生,当事件发生后,所有等待的线程都可以继续执行。
CountDownLatch 的使用步骤如下:
1. 创建一个 CountDownLatch 对象,指定需要等待的线程数。
2. 在需要等待的线程中,调用 CountDownLatch 的 await() 方法,等待事件的发生。
3. 当事件发生时,调用 CountDownLatch 的 countDown() 方法,通知等待的线程可以继续执行。
下面是一个简单的例子:
```
import java.util.concurrent.CountDownLatch;
public class CountDownLatchDemo {
public static void main(String[] args) throws InterruptedException {
CountDownLatch latch = new CountDownLatch(3);
Thread t1 = new Thread(new Task("Task1", latch));
Thread t2 = new Thread(new Task("Task2", latch));
Thread t3 = new Thread(new Task("Task3", latch));
t1.start();
t2.start();
t3.start();
latch.await(); // 等待所有任务执行完成
System.out.println("All tasks have been completed.");
}
static class Task implements Runnable {
private String name;
private CountDownLatch latch;
public Task(String name, CountDownLatch latch) {
this.name = name;
this.latch = latch;
}
@Override
public void run() {
System.out.println(name + " is running...");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(name + " has completed.");
latch.countDown();
}
}
}
```
在这个例子中,我们创建了一个 CountDownLatch 对象,并指定需要等待的线程数为 3。然后创建了 3 个线程,并让它们执行一个简单的任务:输出线程名字、等待 1 秒钟,然后输出线程名字并调用 countDown() 方法。最后在主线程中调用 await() 方法等待所有任务执行完成。当所有任务执行完成后,输出一条“所有任务已完成”的消息。
阅读全文