了解 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
 
					 
				 
				    		 
				    		 
				    		 
				    		