В своем выступлении об Эффективной Java в 54:15 Джошуа Блох рекомендует использовать get
перед putIfAbsent
для повышения производительности и параллелизма. Это подводит меня к вопросу, почему эта оптимизация уже не встроена, например
public V BETTER_putIfAbsent(K key, V value) {
V result = get(key);
if (result!=null) return result;
return ORIGINAL_putIfAbsent(key, value);
}