了解 ConcurrentHashMap 计算方法的代码
2022-08-31 22:34:15
刚刚在 ConcurrentHashMap 计算方法中发现了这个奇怪的代码:(第 1847 行)
public V compute(K key,
BiFunction<? super K, ? super V, ? extends V> remappingFunction) {
...
Node<K,V> r = new ReservationNode<K,V>();
synchronized (r) { <--- what is this?
if (casTabAt(tab, i, null, r)) {
binCount = 1;
Node<K,V> node = null;
因此,代码对仅对当前线程可用的新变量执行同步。这意味着没有其他线程可以竞争此锁定或导致内存限制效应。
这个动作的意义何在?这是一个错误还是它会导致一些我不知道的不明显的副作用?
附言 jdk1.8.0_131