我正在尝试维护各自经过时间(长值)的键映射。 Guava的AtomicLongMap非常适合这个问题:我只想保持最大的值(经过时间),这样Map的大小就不会变得荒谬(有很多可能的键)。
因此,我希望理想地逐出条目以将地图维持在一定的大小。将保留最大的值。显然我可以以阻塞的方式(同步)做到这一点,但我正在寻找一些不那么阻塞的东西,因为许多线程非常频繁地访问这个地图。
我的一个想法是制作一个在达到某个阈值后运行的收割机,复制地图,修剪然后重置参考(可能是原子参考或标记为volatile
)。当然,这有许多不足之处,例如在地图被复制的同时维护一个单独的线程并丢失数据,我确信其他各种可能出错的地方。
我应该考虑使用数据结构/库吗?
答案 0 :(得分:0)
最简单的选项可能是添加并发环缓冲区。添加条目时,会从环形缓冲区中获取要删除的条目。这样,您只能使用环形缓冲区的大小,并且不需要额外的线程。