public static <K, V> V computeIfAbsentEx(ConcurrentMap<K, V> map, K key,
    IOExceptionSupplier<V> supplier) throws IOException {
    V v, newValue;
    return ((v = map.get(key)) == null && (newValue = supplier.get()) != null
      && (v = map.putIfAbsent(key, newValue)) == null) ? newValue : v;
  }
In HBASE-16648 we found that ConcurrentHashMap.get is much faster than computeIfAbsent if the
value already exists. So here we copy the implementation of
{@link ConcurrentMap#computeIfAbsent(Object, java.util.function.Function)}. It uses get and
putIfAbsent to implement computeIfAbsent. And notice that the implementation does not guarantee
that the supplier will only be executed once.
hbase-common/src/main/java/org/apache/hadoop/hbase/util/ConcurrentMapUtils.java