Java :多核 CPU 多线程下,原子操作有先后顺序吗?

2018-03-01 11:12:54 +08:00
 esolve

譬如 JAVA 里 ConcurrentHashMap 的 putIfAbsent 方法

两个线程同时调用这个方法 putIfAbsent ( key1,value1 )

他们之间会有先后顺序吗?不会两个都成功吧?

1086 次点击
所在节点    问与答
2 条回复
honeycomb
2018-03-01 15:07:11 +08:00
看源码。

Java8 的 concurrenthashmap 的 put 和 putifabsent 都是用了 putval,而 putval 涉及到 onlyifabsent 的地方是给 Node 上锁的,谁抢到这个锁谁上。
honeycomb
2018-03-01 15:15:37 +08:00
空 bin 的时候应该是靠前面的 castabat,也是调用 cas 操作:unsafe.compareandswapobject

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

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

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

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

© 2021 V2EX