我正在尝试创建一个地图,其中的条目超时并在一段时间后被删除。
基本上,<K, V> Map.put(K key, V value, long **time**)
- 该条目将立即放入地图中,并在时间(ms)后过期。我不需要在将来的任何时候恢复删除的条目,但我想确保它不再在地图中。
例如:map.put("foo", "bar", 60l * 1000l)
会让这个键值对在地图中生存一分钟(60长和1000长)。
尝试:使用ConcurentMap并通过以下方式实施Map.put(K key, V value, long **time**)
:
1.致电super.put(key, value)
2.创建一个休眠时间(ms)的线程
3.致电remove(key)
删除条目。
问题:请评论/让我知道这在线程安全性,一致性或我尝试的任何缺陷方面是否是一个好主意。如果您认为有更好的方法可以实现这一目标,请提供任何建议。
编辑:感谢回复,内存不是这里的问题,我真的只关心条目的短寿命。谢谢。
答案 0 :(得分:4)
时间是您正在解决的问题的重要组成部分吗?或者它是一个实现细节?如果您正在解决的问题是内存使用问题,那么我会想到另外两种可能性:
修改强>
在这种情况下,有一些现有的实现可能会为您节省一些时间。例如:
答案 1 :(得分:1)
如果由于某些内存问题(地图是临时缓存)而这样做,您应该考虑使用软引用(documentation)。
答案 2 :(得分:1)
看看Guava - 这是Google的收藏库。特别是,您需要查看CacheBuilder及其计算映射。它的一个特点是“自上次访问或上次写入以来测量的条目的基于时间的到期”,听起来就像您正在寻找的那样。
(编辑谈论CacheBuilder;它是我发布的新内容,与问题更相关)