如何以保证的固定速率调度Java任务,而不依赖于任务运行时?

如何以保证的固定速率调度Java任务,而不依赖于任务运行时?,java,timeout,scheduled-tasks,Java,Timeout,Scheduled Tasks,如果希望按一定的时间间隔安排任务,则java.util.Timer的scheduleAtFixedRate是一个明显的选择。但是,如果间隔时间为10秒。这些任务需要10秒以上的时间。此函数将根据文档忙着执行任何挂起的操作(引用:两个或多个执行将快速连续执行以“赶上”)。这当然是一种合理的实现方式,但并不一定是您想要的 是否有人知道Java API中的标准功能,用于调度任务n+1毫秒后的任务n,而与任务n花费的时间无关 我自己已经两次实现了这个功能(两个不同的项目),因为在我偶然发现的情况下,这是

如果希望按一定的时间间隔安排任务,则java.util.Timer的scheduleAtFixedRate是一个明显的选择。但是,如果间隔时间为10秒。这些任务需要10秒以上的时间。此函数将根据文档忙着执行任何挂起的操作(引用:两个或多个执行将快速连续执行以“赶上”)。这当然是一种合理的实现方式,但并不一定是您想要的

是否有人知道Java API中的标准功能,用于调度任务n+1毫秒后的任务n,而与任务n花费的时间无关

我自己已经两次实现了这个功能(两个不同的项目),因为在我偶然发现的情况下,这是实现它最正确的方法

你可能会说这很琐碎(事实的确如此),但如果这不是一件经常发生的事情,我就没有提到它


我在这里的主要观点是,如果“追赶”策略被认为是“正确的”,那么我在这里的方法在很多情况下都是同样正确的,我认为scheduleAtFixedRate应该包括一个选项。这对我来说不是问题,我只是想看看是否有人知道这是否已经在Java API中实现了,这样我就不必时不时地编写代码。

这将通过
schedule()
方法来实现(假设使用了
Java.util.Timer
)。它提供固定的延迟,而不是固定的速率。

经过一些(重新)搜索,我相信这种方法实现了这一点。

我认为这正是你想要的。Java.util.timer->schedule(TimerTask任务、长延迟、长周期)。它以“固定延迟”执行。
根据文档:在固定延迟执行中,每次执行都是相对于前一次执行的实际执行时间安排的。如果执行因任何原因(如垃圾收集或其他后台活动)而延迟,则后续执行也将延迟。

是的,我在实现中使用了它。但这并不能解决问题本身。我仍然需要我的实现。啊,你的意思是如果第一个任务花费的时间太长,你会希望同时运行两个任务吗?不。我希望任务n+1在任务n完成后运行几毫秒。然后我建议改用Quartz Scheduler。我已经走了这条路线,并得出结论,大约40行代码比在石英中拖动:)