Как сделать атомарное «get & Clear» для ConcurrentHashMap в Java? - PullRequest
0 голосов
/ 26 ноября 2018

Я хотел бы сделать Atomic getAndClear() на ConcurrentHashMap.

Я бы хотел периодически обрабатывать все элементы на карте, после чего очищать карту.Время от времени данные вставляются снова, и через некоторое время я снова выполняю ту же обработку.

Структура данных - map, чтобы предотвратить дублирование.Это также ConcurrentHashMap для поддержки размещения данных из нескольких потоков.

Вариант 1: я могу обрабатывать каждый элемент и удалять его после его обработки.Проблема в том, что могут быть вставлены новые элементы с тем же ключом, которые будут обрабатываться снова одновременно, а не периодически.

Вариант 2: Синхронизировать и блокировать вставку, пока я истощаю карту.Не хочу этого делать.

Вариант 3: лучшее, что я придумал: использование AtomicReference.getAndSet().Должно работать, но сделать использование немного громоздким.

Есть идеи, если есть API, обертка или какой-то другой способ достижения этой цели?Спасибо.

...