public static <K, V> V computeIfAbsent(ConcurrentMap<K, V> map, K key, Supplier<V> supplier,
    Runnable actionIfAbsent) {
    V v = map.get(key);
    if (v != null) {
      return v;
    }
    V newValue = supplier.get();
    v = map.putIfAbsent(key, newValue);
    if (v != null) {
      return v;
    }
    actionIfAbsent.run();
    return newValue;
  }
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