Просто нашел этот странный код в методе вычисления 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;
Таким образом, код выполняет синхронизацию по новой переменной, доступной только для текущего потока. Это означает, что нет никакой другой нити, которая могла бы конкурировать за этот замок или вызвать эффекты барбариса памяти.
В чем смысл этого действия? Является ли это ошибкой или вызывает некоторые неочевидные побочные эффекты, о которых я не знаю?
p.s. jdk1.8.0_131