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

Java 如果计时器落后于计划怎么办,java,timer,schedule,threadpoolexecutor,Java,Timer,Schedule,Threadpoolexecutor,我使用的是java.util.Timer类。我用它来执行重复的任务。(例如,每秒检查一次状态的轮询机制) 问题是:计时器可能会落后。e、 g.如果他们需要每秒钟执行一次,并且任务需要2秒钟才能执行 文件上说计时器将试图赶上。e、 g.突然间,如果任务只需要半秒钟就可以执行,它会加速 首先,我想知道,是否有一种内置的方法来检测它是否落后于 但无论如何,我正在寻找一种方法来禁用追赶行为。 如果它落后,我只希望它跳过几个周期。 (对于类似的任务,我也使用了ScheduledThreadPoolExec

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

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

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

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

但无论如何,我正在寻找一种方法来禁用追赶行为。 如果它落后,我只希望它跳过几个周期。

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

编辑: 现在考虑一下,我认为使用
ScheduledThreadPoolExecutor
的方法是使用
scheduleWithFixedDelay
方法,该方法在任务执行之间使用间隔


不过,有没有办法用
计时器实现同样的效果呢?

如果你不在乎计时器是否落后,为什么不使用一个简单的while循环和Thread.sleep,例如:

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

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

如果你不在乎计时器是否落后,为什么不使用一个简单的while循环和一个Thread.sleep,例如:

while(condition) {
    // do work here
    Thread.sleep(1000L);
}
如果由于操作系统调度的限制而落后,它将永远不会试图弥补损失的时间。它将始终至少延迟您指定的时间量。记住,简单比复杂好