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



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

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

问题情况是:计时器可能落后于。例如,如果它们需要每秒执行一次,并且任务需要2秒执行。

文档中说计时器会尝试追赶。突然间,如果任务只需要半秒钟就能执行,它就会加快速度。

首先,我想知道,是否有内置的方法来检测它是否运行在之后。

但无论如何,我正在寻找一种方法来禁用追赶行为。如果它落后了,我只想让它跳过几个循环。

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

<标题>编辑:

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

还有,有没有一种方法可以实现相同的Timer ?

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

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

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

最新更新