譬如 JAVA 里 ConcurrentHashMap 的 putIfAbsent 方法
两个线程同时调用这个方法 putIfAbsent ( key1,value1 )
他们之间会有先后顺序吗?不会两个都成功吧?
1
honeycomb 2018-03-01 15:07:11 +08:00 via Android
看源码。
Java8 的 concurrenthashmap 的 put 和 putifabsent 都是用了 putval,而 putval 涉及到 onlyifabsent 的地方是给 Node 上锁的,谁抢到这个锁谁上。 |
2
honeycomb 2018-03-01 15:15:37 +08:00 via Android
空 bin 的时候应该是靠前面的 castabat,也是调用 cas 操作:unsafe.compareandswapobject
|