CountDownLatch 用法
CountDownLatch是java.util.concurrent包中一个类,CountDownLatch只要提供的机制是多个(具体数量等于初始化CountDownLatch时count的值)线程都达到了预期状态或者完成了预期工作时触发事件,其他线程可以等待这个事件来触发自己后续的工作。等待的线程可以是多个,即CountDownLatch可以唤醒多个等待的线程。到达自己预期状态的线程会调用CountDownLatch的countDown方法,而等待的线程会调用CountDownLatch的await方法。
每次调用countDown方法时,计数都会减1,直到0为止,此时因调用await方法的阻塞线程被唤醒
代码例子:
public static void main(String[] args) throws InterruptedException { CountDownLatch countDown = new CountDownLatch(1); CountDownLatch await = new CountDownLatch(5); // 依次创建并启动处于等待状态的5个MyRunnable线程 for (int i = 0; i < 5; ++i) { new Thread(new MyRunnable(countDown, await)).start(); } System.out.println("用于触发处于等待状态的线程开始工作......"); System.out.println("用于触发处于等待状态的线程工作完成,等待状态线程开始工作......"); countDown.countDown(); await.await(); System.out.println("Bingo!");} public class MyRunnable implements Runnable { private final CountDownLatch countDown; private final CountDownLatch await; public MyRunnable(CountDownLatch countDown, CountDownLatch await) { this.countDown = countDown; this.await = await; } public void run() { try { countDown.await();//等待主线程执行完毕,获得开始执行信号... System.out.println("处于等待的线程开始自己预期工作......"); await.countDown();//完成预期工作,发出完成信号... } catch (InterruptedException e) { e.printStackTrace(); } }}运行结果:用于触发处于等待状态的线程开始工作......用于触发处于等待状态的线程工作完成,等待状态线程开始工作......处于等待的线程开始自己预期工作......处于等待的线程开始自己预期工作......处于等待的线程开始自己预期工作......处于等待的线程开始自己预期工作......处于等待的线程开始自己预期工作......Bingo! 继续阅读与本文标签相同的文章
上一篇 :
一年节省带宽费近万元!阿里云虚拟主机再次免费升级
下一篇 :
【java并发】Semaphore 的使用
-
从支付宝第一位实习生到CTO,他有这些话想说
2026-05-22栏目: 教程
-
【从入门到放弃-Java】并发编程-JUC-CopyOnWriteArraySet
2026-05-22栏目: 教程
-
独家专访阿里集团副总裁贾扬清:我为什么选择加入阿里巴巴?| 7月30号云栖夜读
2026-05-22栏目: 教程
-
基于边缘容器的阿里云CDN云原生实践
2026-05-22栏目: 教程
-
服装社交电商平台思路分享
2026-05-22栏目: 教程
