У меня есть usecase, где я должен
- вставить новое значение, если ключ не существует в ConcurrentHashMap
- замените старое значение новым значением, если ключ уже существует в ConcurrentHashMap, где новое значение получается из старого значения (не дорогостоящая операция).
У меня есть следующий код:
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);
}
Считаете ли вы его правильным и потокобезопасным?
Есть ли более простой способ?