CountDownLatch(线程计数器)
CountDownLatch(线程计数器)
CountDownLatch 类位于 java.util.concurrent 包下,利用它可以实现类似计数器的功能。比如有一个任务 A,它要等待其他 4 个任务执行完毕之后才能执行,此时就可以利用 CountDownLatch来实现这种功能了。
特点
- countDownLatch这个类使一个线程等待其他线程各自执行完毕后再执行。
- 是通过一个计数器来实现的,计数器的初始值是线程的数量。每当一个线程执行完毕后,计数器的值就-1,当计数器的值为0时,表示所有线程都执行完毕,然后在闭锁上等待的线程就可以恢复工作了。
主要方法
//阻塞并等待计算归零
public void await();
//阻塞一段时间,并等待计算归零,如果超时就停止阻塞
public boolean await(long timeout, TimeUnit unit);
//计数-1
public void countDown();
示例
public static void main(String[] args) {
CountDownLatch countDownLatch = new CountDownLatch(2);
new Thread(()->{
try {
System.out.println(Thread.currentThread().getName()+"---runing");
Thread.sleep(1000);
System.out.println(Thread.currentThread().getName()+"---finish");
countDownLatch.countDown();
} catch (InterruptedException e) {
e.printStackTrace();
}
},"A").start();
new Thread(()->{
try {
System.out.println(Thread.currentThread().getName()+"---runing");
Thread.sleep(1000);
System.out.println(Thread.currentThread().getName()+"---finish");
countDownLatch.countDown();
} catch (InterruptedException e) {
e.printStackTrace();
}
},"B").start();
System.out.println("主线程等待子线程执行完毕");
try {
countDownLatch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("子线程执行完毕");
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)