ConcurrentMap: атомарно проверяет наличие значения, а затем изменяет его с помощью потребителя.JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 ConcurrentMap: атомарно проверяет наличие значения, а затем изменяет его с помощью потребителя.

Сообщение Anonymous »

При наличии Java ConcurrentMap я хотел бы атомарно:
  • Проверить, содержится ли запись на карте
  • Если она присутствует, запустить действие (я думаю о BiConsumer, принимающем ключ и его значение)
  • В противном случае запустить другое действие (Потребитель, который принимает отсутствующий ключ)
Как я могу использовать существующий API ConcurrentMap для выполнения следующих действий потокобезопасным способом?
if (map.containsKey(key)) {
V value = map.get(key);
ifPresentAction.accept(key, value);
} else {
ifAbsentAction.accept(key);
}

где карта имеет тип ConcurrentMap, ключ имеет тип K, а ifPresentAction и ifAbsentAction являются соответственно BiConsumer и Consumer.

Дополнительная информация
Я думал о вызовеOptional.ifPresentOrElse (с правильными типами), но не уверен, что это будет потокобезопасно.
Optional.ofNullable(map.get(key))
.ifPresentOrElse(ifPresentAction, ifAbsentAction);


Подробнее здесь: https://stackoverflow.com/questions/798 ... -it-with-a
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»