
并发编程复习(五):CountDownLatch
输出结果:
发布日期:2021-11-13 10:21:44
浏览次数:4
分类:技术文章
本文共 1858 字,大约阅读时间需要 6 分钟。
今天主要基于上一节的文章,其实这两张连起来是阿里的一道面试题。上一节我们说明了notify不能释放锁,那么怎么能做到及时通知呢?这时就可以用concurrent包下的一个同步工具类:CountDownLatch。
代码说明:
import java.util.ArrayList;import java.util.List;import java.util.concurrent.CountDownLatch;/** * 注意:wait方法是释放锁的,notify方法不会释放锁 * @author lihao * */public class MyThread6 {
private volatile List list = new ArrayList<>();
private static CountDownLatch downLatch = new CountDownLatch(1);
public void add() {
list.add("主席");
}
public int getSize() {
return list.size();
}
public static void main(String[] args) {
MyThread6 myThread6 = new MyThread6();
//Object obj = new Object();
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
//synchronized (obj) {
for(int i=0;i<10;i++){
myThread6.add();
System.out.println("线程" + Thread.currentThread().getName() + "添加了一个元素");
try {
Thread.sleep(1000);
if (myThread6.getSize() == 5) {
System.out.println("发出通知");
//obj.notifyAll();
downLatch.countDown();
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//}
}
},"t1");
Thread thread2 = new Thread(new Runnable() {
@Override
public void run() {
//synchronized (obj) {
if(myThread6.getSize()!=5){
try {
//obj.wait();
downLatch.await();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println("收到通知");
throw new RuntimeException();
//}
}
});
thread2.start();
thread.start();
}}
输出结果:
线程t1添加了一个元素线程t1添加了一个元素线程t1添加了一个元素线程t1添加了一个元素线程t1添加了一个元素发出通知Exception in thread "Thread-0" 线程t1添加了一个元素收到通知java.lang.RuntimeException你会发现代码还变简单了,那么CountDownLatch这个类到底是什么意思呢?
at cn.lh.bf.MyThread6$2.run(MyThread6.java:64)
at java.lang.Thread.run(Thread.java:745)线程t1添加了一个元素线程t1添加了一个元素线程t1添加了一个元素线程t1添加了一个元素
你会发现在构造函数中我们传递了一个int数值,其实这个类就像一个计数器,每次调用
downLatch.countDown();方法会将我们构造时的int值减一操作,当该值为0时会立即唤醒所有使用downLatch.await();等待的线程。
综上:其实为阿里的一道面试题,谢谢大家
转载地址:https://blog.csdn.net/Lee_Ho_/article/details/78054904 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.200.74.241]2022年05月27日 17时29分22秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
最新文章
斐波那契数列 线性dp
2019-07-23 23:57:28
upc bus 线性dp
2019-07-23 23:57:27
upc 奇怪的道路 分形之城---改版
2019-07-23 23:57:27
upc 艰难取舍 最长上升子序列
2019-07-23 23:57:26
upc 工作团队 并查集 + 虚父节点
2019-07-23 23:57:26
最后一次新生赛 B+C+D
2019-07-23 23:57:25
upc 马拉松比赛 dp
2019-07-23 23:57:25
upc 地球发动机 线性dp + 二分
2019-07-23 23:57:24
upc 电话网络 二分+最短路
2019-07-23 23:57:23
upc 结队 并查集+数学
2019-07-23 23:57:23
upc 考试 离散化+差分
2019-07-23 23:57:22
upc 魔法阵
2019-07-23 23:57:22
upc 走迷宫 bfs
2019-07-23 23:57:21
upc 生命曲线 线段树+lazy
2019-07-23 23:57:20
组装玩具 贪心||二分
2019-07-23 23:57:19
统计序列
2019-07-23 23:57:19
游戏智商 动规
2019-07-23 23:57:18
Codeforces Eugene and an array
2019-07-23 23:57:17
upc 真假鉴定 思维+模拟
2019-07-23 23:57:17
玉米田 组合数学 环涂色
2019-07-23 23:57:16