kombiniere putIfAbsent und ersetze es mit ConcurrentMap

Ich habe ein usecase, wo ich muss

Fügen Sie einen neuen Wert ein, wenn der Schlüssel in der ConcurrentHashMap nicht vorhanden istErsetzen Sie den alten Wert durch einen neuen Wert, wenn der Schlüssel bereits in der ConcurrentHashMap vorhanden ist. Dabei wird der neue Wert vom alten Wert abgeleitet (keine teure Operation).

Ich habe folgenden Code zu bieten:

<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>

Denken Sie, dass es korrekt und threadsicher ist?

Gibt es einen einfacheren Weg?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage