ConcurrentHashMap.put V.S. ConcurrentHashMap.replace

concurrency, concurrenthashmap, dictionary, java, java.util.concurrent

Solution

They are functionally different. `replace` only stores the key-value pair if there already was a value stored under the specified key. The API documentation of `replace` explains it:

Replaces the entry for a key only if currently mapped to some value. This is equivalent to

if (map.containsKey(key)) {
    return map.put(key, value);
} else return null;

except that the action is performed atomically.

Problem

From the Javadoc I know `ConcurrentHashMap.replace` is atomic, but what about `ConcurrentHashMap.put`? I see they are differently implemented in the source code but I'm not able to figure out their differences. Any gurus to give some guidelines about how to use these two methods?

Original source