ScheduledExecutorService性能

时间:2015-08-17 16:05:35

标签: java performance scheduledexecutorservice

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

处理这种情况的最佳或首选方法是什么?

  • 为每个对象更新使用计划任务。取消旧的并重置新的。

  • 或者使用一个具有固定延迟的计划任务,例如500毫秒。通过时间比较检查旧物体......

  • 或其他。

你推荐什么?

2 个答案:

答案 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 秒,删除每个过期的元素。

我无法真正说出最佳实现,因为我只将其用于几百个简单元素(即非复杂对象)。