połącz putIfAbsent i zamień na ConcurrentMap

Mam walizkę, gdzie muszę

wstaw nową wartość, jeśli klucz nie istnieje na mapie ConcurrentHashMapzastąp starą wartość nową wartością, jeśli klucz już istnieje w ConcurrentHashMap, gdzie nowa wartość jest pochodną starej wartości (nie jest to kosztowna operacja)

Mam do zaoferowania następujący kod:

<code>public void insertOrReplace(String key, String value) {
        boolean updated = false;
        do {
            String oldValue = concurrentMap.get(key);
            if (oldValue == null) {
                oldValue = concurrentMap.putIfAbsent(key, value);
                if (oldValue == null) {
                    updated = true;
                }
            }
            if (oldValue != null) {
                final String newValue = recalculateNewValue(oldValue, value);
                updated = concurrentMap.replace(key, oldValue, newValue);
            }
        } while (!updated);
    }
</code>

Czy uważasz, że jest poprawny i bezpieczny w wątkach?

Czy istnieje prostszy sposób?

questionAnswers(4)

yourAnswerToTheQuestion