combine putIfAbsent e substitua por ConcurrentMap
Eu tenho um usecase onde eu tenho que
insira um novo valor se a chave não existir no ConcurrentHashMapsubstitua o valor antigo por um novo valor se a chave já existir no ConcurrentHashMap, em que o novo valor é derivado do valor antigo (não é uma operação cara)Eu tenho o seguinte código para oferecer:
<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>
Você acha que é correto e seguro para thread?
Existe uma maneira mais simples?