求大佬们解答 CountDownLatch 使用中的一个问题

2021-02-20 13:16:20 +08:00
 zhuawadao

问题如下链接 https://app.yinxiang.com/fx/d1092af2-d340-4a56-a506-8ff84f434626

1856 次点击
所在节点    Java
6 条回复
newaccount
2021-02-20 13:39:55 +08:00
isir1234
2021-02-20 13:41:21 +08:00
1. state 初始 10000,
2. 线程 1 执行了 countDown => state=9999
3. 线程 2 执行了 countDown => state=9998
4. 线程 1 执行 getCount => 输出 9998
5. 线程 2 执行 getCount => 输出 9998
zhuawadao
2021-02-20 13:45:46 +08:00
@newaccount 多谢指点!
zhuawadao
2021-02-20 13:47:22 +08:00
@isir1234 多谢指点!
thinkmore
2021-02-24 10:18:59 +08:00
你有一个误区。CountDownLatch 并不保证线程安全,所以你代码中的 getCount()相当于多线程并发调用。

关于源码分析,可以看下我的这篇文章: https://juejin.cn/post/6911572211509755912

@zhuawadao
zhuawadao
2021-02-24 19:39:17 +08:00
@thinkmore 多谢指点!我看了源码,确实如 1 楼所指出的,只保证可见性,不保证原子性

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/754572

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX