CountDownLatch通过计数器实现线程等待,初始化指定数量,调用countDown()减一,await()阻塞至计数为零,适用于主线程等待多个任务完成的场景。

在Java中,CountDownLatch 是一种非常实用的并发工具类,位于 java.util.concurrent 包下,用于让一个或多个线程等待其他线程完成操作后再继续执行。它通过一个计数器实现,当计数器归零时,所有被阻塞的线程将被唤醒。
CountDownLatch 的基本原理
CountDownLatch 内部维护一个计数器,初始化时指定需要等待的线程数量。每当一个线程完成任务后,调用 countDown() 方法将计数器减一。其他等待的线程调用 await() 方法阻塞自己,直到计数器变为0,表示所有线程都已完成任务,此时等待线程恢复执行。
关键点:
计数器一旦归零,无法重置(与CyclicBarrier不同) 多个线程可同时调用 await(),全部会被释放 适用于“等待N个任务完成”的场景
使用步骤和代码示例
下面是一个典型的使用场景:主线程启动多个工作线程,并等待它们全部完成后才继续执行。
网易人工智能
网易数帆多媒体智能生产力平台
206 查看详情
立即学习“Java免费学习笔记(深入)”;
// 示例:使用 CountDownLatch 等待5个线程完成
import java.util.concurrent.CountDownLatch;public 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(Thread.currentThread().getName() + " 完成任务"); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } finally { latch.countDown(); // 任务完成,计数器减一 } }}public class Main { public static void main(String[] args) throws InterruptedException { int threadCount = 5; CountDownLatch latch = new CountDownLatch(threadCount); for (int i = 0; i < threadCount; i++) { new Thread(new Worker(latch), "Worker-" + i).start(); } System.out.println("等待所有工作线程完成..."); latch.await(); // 主线程阻塞,直到计数器为0 System.out.println("所有线程已完成,继续执行主线程"); }}
常见应用场景
CountDownLatch 特别适合以下几种并发控制场景:
多线程初始化等待:多个模块并行初始化,主线程等待全部准备就绪 性能测试:让多个线程同时开始执行任务,模拟高并发 分阶段任务协调:前一阶段所有任务完成,再进入下一阶段// 示例:模拟并发请求(起跑线模式)
CountDownLatch startSignal = new CountDownLatch(1);CountDownLatch doneSignal = new CountDownLatch(N);for (int i = 0; i < N; ++i) { new Thread(new Worker(startSignal, doneSignal)).start();}// 所有线程就绪后,统一发令开始startSignal.countDown(); doneSignal.await(); // 等待所有线程完成
基本上就这些。CountDownLatch 使用简单,逻辑清晰,是处理“等待多个线程完成”问题的首选工具之一。只要注意计数器不能重置的问题,合理设计初始值,就能有效协调线程间的执行顺序。
以上就是在Java中如何使用CountDownLatch等待多线程完成_CountDownLatch多线程等待方法解析的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1108011.html
微信扫一扫
支付宝扫一扫