Я хотел бы сделать Atomic getAndClear()
на ConcurrentHashMap.
Я бы хотел периодически обрабатывать все элементы на карте, после чего очищать карту.Время от времени данные вставляются снова, и через некоторое время я снова выполняю ту же обработку.
Структура данных - map
, чтобы предотвратить дублирование.Это также ConcurrentHashMap
для поддержки размещения данных из нескольких потоков.
Вариант 1: я могу обрабатывать каждый элемент и удалять его после его обработки.Проблема в том, что могут быть вставлены новые элементы с тем же ключом, которые будут обрабатываться снова одновременно, а не периодически.
Вариант 2: Синхронизировать и блокировать вставку, пока я истощаю карту.Не хочу этого делать.
Вариант 3: лучшее, что я придумал: использование AtomicReference.getAndSet()
.Должно работать, но сделать использование немного громоздким.
Есть идеи, если есть API, обертка или какой-то другой способ достижения этой цели?Спасибо.