HashMap? ConcurrentHashMap? 相信看完这篇没人能难住你!

2018-07-23 08:22:50 +08:00
 crossoverJie

https://crossoverjie.top/2018/07/23/java-senior/ConcurrentHashMap/

5492 次点击
所在节点    程序员
45 条回复
beny2mor
2018-07-23 17:14:02 +08:00
mark 一下
crossoverJie
2018-07-23 17:52:12 +08:00
@liuzhen #20 可以的。
Antidictator
2018-07-23 18:27:39 +08:00
支持一下
LuckCode
2018-07-23 18:34:19 +08:00
我去,从博客看到公众号,今天在 v 站看到了作者。
缘分啊,py 交易一下。
WildCat
2018-07-23 18:35:11 +08:00
支持。最近用 pandoc 把你的 repo 转换成了 epub 在手机上看,受益良多
crossoverJie
2018-07-23 18:42:07 +08:00
@LuckCode #24 哈哈 我这是广撒网啊 你也是哪个网都钻进来了
crossoverJie
2018-07-23 18:43:32 +08:00
@WildCat #25 👍 咋搞的呀,可以提个 Issue。

https://github.com/crossoverJie/Java-Interview/issues/new
zxq1002
2018-07-23 19:59:31 +08:00
打开好慢。。
WildCat
2018-07-23 20:03:49 +08:00
@crossoverJie 我目前转换的有问题,不过我先开个 issue 抛砖引玉吧
crossoverJie
2018-07-23 20:06:55 +08:00
@zxq1002 #28 确实挺慢的,准备转到国内了。
shiguiyou
2018-07-24 08:35:47 +08:00
打不开。。。
crossoverJie
2018-07-24 10:19:56 +08:00
@shiguiyou #31 多等等 卡。。
mrrobot97
2018-07-24 10:23:36 +08:00
safari 禁用了 Flash 打开网页后风扇开始怒吼..
zpxshl
2018-07-24 12:31:03 +08:00
我来提(请教)个问题。
1.8 版 concurrentHM,当使用 cas 插入,如何保证结果对其他线程可见。 volatile 不保证数组元素的可见性。
crossoverJie
2018-07-24 13:11:58 +08:00
@zpxshl #34

在 put 判断当前位置为空用 CAS 写入之前调用的是:

tabAt() 方法,它所依赖的是 Unsafe 包中的 getObjectVolatile() 可以保证可见性。
zpxshl
2018-07-25 07:55:45 +08:00
@crossoverJie
#35 getObjectVolatile ()只能保证自己读到的是最新值。
putObjectVolatile 才能保证将值写回主内存。
crossoverJie
2018-07-25 09:05:00 +08:00
@zpxshl #36 嗯 你不是问的怎么保证可见性嘛,获取到的是最新值就不会有可见性的问题了。
zpxshl
2018-07-25 10:04:12 +08:00
@crossoverJie 可见性...... 是一个变量修改其他线程都可以见到。 你获取到最新值,(为空时) cas 插入。 此时数组元素被修改,如何保证其他线程见到你的修改?
crossoverJie
2018-07-25 10:28:51 +08:00
@zpxshl #38 如何保证其他线程见到你的修改?

其他线程在 tabAt()



这里不就获取了到最新值了嘛?也就是获取到了其他线程的修改。

get 的时候也是一样的:

zpxshl
2018-07-25 12:27:44 +08:00
@crossoverJie 朋友。getObjectVolatile 只是获得主内存的数据。并没有强制将其他线程的工作内存数据刷新回主内存的功能。 也就是说 当你 cas 修改数组数据后,如果没有将数据缓存刷回主内存。其他线程用 getObjectVolatile 也读不到最新的值。

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

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

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

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

© 2021 V2EX