我有一个最大大小为5000的对象列表。如果某个对象没有按类型特定的时间更新,如5,10或100秒,它将从列表中删除。
处理这种情况的最佳或首选方法是什么?
为每个对象更新使用计划任务。取消旧的并重置新的。
或者使用一个具有固定延迟的计划任务,例如500毫秒。通过时间比较检查旧物体......
或其他。
你推荐什么?
答案 0 :(得分:1)
如果您可以使用Google's Guava,则应尝试Cache
课程。
例如,您可以为每种类型的对象设置一个缓存:
LoadingCache<String, ObjectOfType1> type1Cache = CacheBuilder.newBuilder()
.maximumSize(5000)
.expireAfterWrite(5, TimeUnit.SECONDS)
.removalListener(MY_LISTENER)
.build(
new CacheLoader<String, ObjectOfType1>() {
public Graph load(String key) throws AnyException {
return createExpensiveGraph(key);
}
});
对于Type2
:
LoadingCache<String, ObjectOfType2> type2Cache = CacheBuilder.newBuilder()
.maximumSize(5000)
.expireAfterWrite(10, TimeUnit.SECONDS)
.removalListener(MY_LISTENER)
.build(
new CacheLoader<String, ObjectOfType2>() {
public Graph load(String key) throws AnyException {
return createExpensiveGraph(key);
}
});
然后,你可以像使用Map
一样使用缓存:
ObjectOfType1 o1 = type1Cache.get("1");
ObjectOfType2 o2 = type2Cache.get("2");
答案 1 :(得分:0)
我实际上使用的实现使用Map<Object, Long>
来存储每个元素的到期时间,并使用java.util.Timer
来运行每个 n 秒,删除每个过期的元素。
我无法真正说出最佳实现,因为我只将其用于几百个简单元素(即非复杂对象)。