当前位置: 首页 > 知识库问答 >
问题:

计划执行器精度

贡斌
2023-03-14

我在java中遇到了ScheduledExecutorService的问题(几天前我没有遇到这个问题,这让我觉得很奇怪)。请找到下面的代码和控制台输出。重复执行任务之间的延迟是1毫秒,所以理想情况下我应该达到每秒1000的计数(几毫秒),但这只是没有发生。请帮帮忙..

代码:

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;


public class SchedulerTest {

     private static final ScheduledExecutorService executor =       Executors.newScheduledThreadPool(2);
     static DateFormat df= new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss.SSS");

     private static class TestRunnable1 implements Runnable{
         private int count=0;

         @Override
          public void run() {
           count++;
           if(count1 % 1000==0){
              System.out.println(count1+"  "+df.format(Calendar.getInstance().getTime()));
            }

         }
    }


   public static void main(String[] args){
      Runnable localService = new TestRunnable1();
      try{
           executor.scheduleWithFixedDelay(localService, 0, 1, TimeUnit.MILLISECONDS);
         }catch(Exception e){
           e.printStackTrace();
        }
   }
 }

控制台输出

1000-2013年3月13日14:43:54.477 200-2013年3月13日14:44:10.296 300-2013年3月13日14:44:26.381 400-2013年3月13日14:44:42.621 500-2013年3月13日14:44:55.907 600-2013年3月13日14:44:55.55.516 600-2013年3月13日14:45:05.896 800-2013年3月13日14:45:10.292 900-2013年3月13日14:45:15.129 1000-2013年3月13日14:45:18.187

共有1个答案

孙熠彤
2023-03-14

您希望使用scheduledexecutorservice#scheduleatfixedrate而不是scheduledexecutorservice#schedulewithfixeddelay

如果以固定延迟进行调度,则上次执行完成的时间和下一次执行开始的时间之间必须间隔1毫秒。因此完成1000次迭代所需的挂钟时间至少是1秒加上1000次迭代的执行时间。

 类似资料:
  • 我用SpringBoot创建了一个简单的演示应用程序,其中包括执行器。带有@Scheduled注释的任务显示在执行器中,但以编程方式启动的任务不会显示。有没有办法让他们也出现? 我已经注释了@Enable调度。 我的组件如下所示: 执行器的结果仅显示带注释的任务:

  • 我一直在处理一个旧的项目,其中启用了Spring调度程序(@Sched我市正在积极使用),也激活了一些本地JDK线程池实例。在下面的项目配置xml中,我看到了; 一些quartz实现产生于它自己的作业定义,触发器定义,其中作业定义了它们自己的线程池执行器,如下所示, 然后开始将任务(Runnable)提交到池中。 但是我看到的是,在某个时候,为这些任务抛出了Spring任务拒绝异常。这是无稽之谈(

  • 问题内容: 我有一个查询,在SQL Server Management STudio中超快,在sp_ExecuteSQL下运行时超慢。 这与在spExecuteSQL下运行时不缓存执行计划有关吗? 问题答案: 不。 您可以看到两个执行计划,并使用以下查询对其进行比较。 该版本将有一个“准备好的”

  • 主要内容:1 调用EXPLAIN,2 EXPLAIN中的列,2.1 id,2.2 select_type,2.3 table,2.4 type,2.5 possible_keys,2.6 key,2.7 key_len,2.8 ref,2.9 rows,2.10 Extra详细介绍了MySQL EXPLAIN执行计划的各个字段的含义以及使用方式。 调用EXPLAIN可以获取关于查询执行计划的信息,以及如何解释输出。EXPLAIN命令是查看查询优化器如何决定执行查询的主要方法,但该动能也有局限性,

  • 我正在开发一个 Spring-MVC 应用程序,其中我使用调度来删除不必要的额外内容。不幸的是,我计划的方法没有触发。谁能告诉我我做错了什么。 这是代码: 我知道参数名称为1周,但我将在3天后删除它。我刚刚复制了代码…:D任何帮助都很好。谢谢

  • 问题内容: 我对执行速度非常慢的存储过程有些困惑。该存储过程基本上包含一个使用传入参数(in_id)的查询,并将其放在游标中,如下所示: 当我获得带有预定义值的SQL查询的执行计划时,使用索引可以得到良好的查询结果。但是,当我从应用程序中调用该过程时,我看到没有索引在使用中,并且该表得到了完整扫描,从而降低了性能。 如果删除WHERE子句的第一部分“(in_id为null)”,则应用程序的性能将再