如何在Java中的ConcurrentHashMap上进行原子“获取并清除”?

时间:2018-11-26 11:39:36

标签: java collections concurrenthashmap

我想在ConcurrentHashMap上进行原子getAndClear()

我想定期处理地图中的所有元素,然后清除地图。偶尔,数据会再次插入,一段时间后,我会再次进行相同的处理。

数据结构为map,以防止重复。它也是ConcurrentHashMap,以支持从多个线程放入数据。

选项1:我可以处理每个元素,并在处理完之后将其删除。问题在于,可能会插入具有相同键的新元素,这些元素将同时而不是定期地再次处理。

选项2:在清空地图时同步并阻止插入。不想那样。

选项3:我想到的最好的方法:使用AtomicReference.getAndSet()。应该可以,但使用起来有点麻烦。

是否知道是否有API,包装程序或其他方法可以实现此目标?谢谢。

0 个答案:

没有答案