CountDownLatch在多线程统计另一个线程的动向
CountDownLatch
在CountDownLatch类里面有两个方法
一个是await()字面意思是等待的一次,他和sleep()方法的区别就是sellp()会自己醒过来,而await()方法需要另一个方法来唤醒,就是countDown()。
演示代码
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
/**
* @author Mxhlin
* @Email fuhua277@163.com
* @Date 2022/10/01/8:37
* @Version
* @Description 门闩案例
*/
public class T3 {
CountDownLatch latch = new CountDownLatch(1);
List<String> list = new ArrayList<>();
void add(){
String name = Thread.currentThread().getName();
System.out.printf("%s线程启动...",name);
while (true){
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
String time = "tiem"+list.size();
list.add(time);
if (list.size() == 5)latch.countDown();
System.out.println(time);
// if (list.size()>9){
// break;
// }
}
}
void cheak(){
String t = Thread.currentThread().getName();
System.out.printf("%s线程启动",t);
try {
latch.await();
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
System.out.printf("%s线程:到第五个元素了%n",t);
}
public static void main(String[] args) {
T3 t = new T3();
new Thread(t::add,"工作").start();
new Thread(t::cheak,"统计").start();
}
}
两个线程同时同时开始cheak这个线程执行到latch.await()这个方法时会停止,等待唤醒,而add方法会判断执行latch.await()来唤醒await;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构