Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ScheduledExecutor服务性能_Java_Performance_Scheduledexecutorservice - Fatal编程技术网

Java ScheduledExecutor服务性能

Java ScheduledExecutor服务性能,java,performance,scheduledexecutorservice,Java,Performance,Scheduledexecutorservice,我有一个最大尺寸为5000的对象列表。当对象在特定类型的时间段(如5、10或100秒)内未更新时,它将从列表中删除 处理这种情况的最佳或首选方案是什么 为每个对象更新使用计划任务。取消旧的并重置新的 或者使用一个固定延迟的计划任务,比如500毫秒。通过时间比较检查旧对象 或者别的什么 您推荐什么?我实际上使用了一个实现,它使用映射来存储每个元素的过期时间,并使用java.util.Timer每隔n秒运行一次,删除每个过期的元素 我不能说它是最好的实现,因为我只对几百个简单元素(即不复杂的对象

我有一个最大尺寸为5000的对象列表。当对象在特定类型的时间段(如5、10或100秒)内未更新时,它将从列表中删除

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

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

  • 或者使用一个固定延迟的计划任务,比如500毫秒。通过时间比较检查旧对象

  • 或者别的什么


您推荐什么?

我实际上使用了一个实现,它使用
映射来存储每个元素的过期时间,并使用
java.util.Timer
每隔n秒运行一次,删除每个过期的元素

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

如果可以使用,应该尝试一下这个类

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

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);
         }
       });
然后,您可以像使用地图一样使用缓存:

ObjectOfType1 o1 = type1Cache.get("1");
ObjectOfType2 o2 = type2Cache.get("2");

你能让对象本身声明它们已经过期,然后让侦听器服务来处理它们吗?在google中搜索“java TimedList”。这实际上取决于从列表中删除内容时是否需要执行任何操作。如果它是一个简单的删除,您可以只使用一个线程。如果你需要做一些工作,一个线程池会更好。事实上,我从我朋友的帐户写的问题是错误的。我注销了帐户。存在需要不同过期时间的对象类型,例如5、10或100。到期后还需要采取一些进一步的措施。
ObjectOfType1 o1 = type1Cache.get("1");
ObjectOfType2 o2 = type2Cache.get("2");