首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ScheduledExecutorService性能

ScheduledExecutorService性能
EN

Stack Overflow用户
提问于 2015-08-17 16:05:34
回答 2查看 779关注 0票数 5

我有一个最大大小为5000的对象的列表。当对象没有更新特定类型的时间,如5秒、10秒或100秒时,它将从列表中删除。

处理这种情况的最佳或优先选择是什么?

  • 对每个对象更新使用预定任务。取消旧的,重新设置新的。
  • 或者使用一个有固定延迟的预定任务,比如500 ms。通过时间比较检查旧物体..。
  • 或者别的什么。

你有什么建议吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-17 17:20:09

如果可以使用谷歌番石榴,则应该尝试使用Cache类。

例如,您可以为每种类型的对象拥有一个缓存:

代码语言:javascript
复制
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

代码语言:javascript
复制
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一样使用缓存。

代码语言:javascript
复制
ObjectOfType1 o1 = type1Cache.get("1");
ObjectOfType2 o2 = type2Cache.get("2");
票数 1
EN

Stack Overflow用户

发布于 2015-08-17 16:31:51

实际上,我使用的是一个实现,它使用Map<Object, Long>来存储每个元素的过期时间,使用一个java.util.Timer来每n秒钟运行一次,删除每个过期的元素。

我不能说它是最好的实现,因为我只对几百个简单的元素(即不是复杂的对象)使用它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32054908

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档