我有一个最大大小为 5000 的对象列表。当一个对象在特定类型的时间内(如 5、10 或 100 秒)没有更新时,它将从列表中删除。
处理这种情况的最佳或首选方案是什么?
为每个对象更新使用计划任务。取消旧的并重置新的。
或者使用一个固定延迟的计划任务,比如 500 毫秒。通过时间比较检查旧对象...
或其他。
你有什么建议?
最佳答案
如果可以使用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");
关于java - ScheduledExecutorService 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32054908/