由大小或自动驱逐约束的最大值的并发Map(AtomicLongMap)

时间:2013-12-03 20:27:23

标签: java concurrency map guava

我正在尝试维护各自经过时间(长值)的键映射。 Guava的AtomicLongMap非常适合这个问题:我只想保持最大的值(经过时间),这样Map的大小就不会变得荒谬(有很多可能的键)。

因此,我希望理想地逐出条目以将地图维持在一定的大小。将保留最大的值。显然我可以以阻塞的方式(同步)做到这一点,但我正在寻找一些不那么阻塞的东西,因为许多线程非常频繁地访问这个地图。

我的一个想法是制作一个在达到某个阈值后运行的收割机,复制地图,修剪然后重置参考(可能是原子参考或标记为volatile)。当然,这有许多不足之处,例如在地图被复制的同时维护一个单独的线程并丢失数据,我确信其他各种可能出错的地方。

我应该考虑使用数据结构/库吗?

1 个答案:

答案 0 :(得分:0)

最简单的选项可能是添加并发环缓冲区。添加条目时,会从环形缓冲区中获取要删除的条目。这样,您只能使用环形缓冲区的大小,并且不需要额外的线程。