CountDownLatch java
时间: 2023-10-19 21:34:39 浏览: 103
CountDownLatch 是 Java 中的一个同步工具类,它可以让一个或多个线程等待其他线程完成某个任务后再继续执行。它通常用于一个线程等待多个线程完成后再执行某个操作。
CountDownLatch 内部维护一个计数器,通过调用 countDown() 方法来减少计数器的值,通过 await() 方法来阻塞等待直到计数器值变为0。
下面是一个简单的示例:
```java
import java.util.concurrent.CountDownLatch;
public class CountDownLatchExample {
public static void main(String[] args) throws InterruptedException {
int numThreads = 5; // 线程数量
CountDownLatch latch = new CountDownLatch(numThreads);
for (int i = 0; i < numThreads; i++) {
Thread thread = new Thread(new WorkerThread(latch));
thread.start();
}
latch.await(); // 等待所有线程执行完毕
System.out.println("All threads have completed their tasks.");
}
}
class WorkerThread implements Runnable {
private final CountDownLatch latch;
public WorkerThread(CountDownLatch latch) {
this.latch = latch;
}
@Override
public void run() {
// 模拟线程执行任务
try {
Thread.sleep(1000);
System.out.println("Thread " + Thread.currentThread().getId() + " has completed its task.");
} catch (InterruptedException e) {
e.printStackTrace();
}
latch.countDown(); // 计数器减1
}
}
```
在上面的示例中,我们创建了5个线程,并且每个线程执行一个模拟的任务。在主线程中,我们创建了一个 CountDownLatch,并将其初始值设置为5(即线程的数量)。在每个工作线程执行完任务后都会调用 countDown() 方法来减少计数器的值。最后,主线程调用 await() 方法来等待计数器的值变为0,即所有线程都执行完任务后,主线程才继续执行输出 "All threads have completed their tasks."。
这样的设计可以用于多个线程协同完成某个复杂操作,例如主线程等待多个子线程完成初始化操作后再进行后续的业务处理。
阅读全文
相关推荐


















