有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如果计时器落后于计划怎么办

我正在使用java.util.Timer类。我用它来执行重复的任务。(例如,每秒检查一次状态的轮询机制)

timer.scheduleAtFixedRate(new Poller(), 0, pollingInterval);

问题是:计时器可能会落后。e、 g.如果他们需要每秒钟执行一次,并且任务需要2秒钟才能执行

文件上说,计时器将试图赶上。e、 g.突然之间,如果任务只需要半秒钟就可以执行,它会加速

首先,我想知道,是否有一种内置的方法来检测它是否落后于

但不管怎样,我正在寻找一种方法来禁用追赶行为。 如果它落后,我只想让它跳过几个周期

(我也使用了ScheduledThreadPoolExecutor来完成类似的任务。它有更多的选项,也许这就是解决方案。但它太难找到了。)

编辑:

现在我想了想,我认为用ScheduledThreadPoolExecutor来做这件事的方法是使用scheduleWithFixedDelay方法,它使用任务执行之间的间隔

不过,有没有办法用Timer实现同样的效果


共 (1) 个答案

  1. # 1 楼答案

    如果你不在乎计时器是否落后,为什么不使用一个简单的带线程的while循环呢。睡眠,例如:

    while(condition) {
        // do work here
        Thread.sleep(1000L);
    }
    

    如果由于操作系统的调度限制而落后,它将永远不会试图弥补损失的时间。它将始终至少延迟您指定的时间。记住,简单比复杂好