为什么我的预定任务之间有很长的延迟

时间:2013-06-08 22:58:42

标签: java scala

我有一个以固定费率完成某些工作的流程:

val scheduler = Executors.newSingleThreadScheduledExecutor()
scheduler.scheduleAtFixedRate(new MigrationWorker(mytask), 1000, 50, TimeUnit.MILLISECONDS)

我的理解是,这应该执行我的任务,中间50毫秒。

在运行它时,我观察到我的任务定期延迟,从日志中,我看到它运行一堆任务,然后暂停约30-60秒,然后做更多。

我想知道是什么原因引起的?

谢谢,

2 个答案:

答案 0 :(得分:0)

如果任务运行的时间比分配的窗口长,则可能会看到此类行为。调度程序可能不会启动前一个调度程序未完成的新程序。

另一个问题可能是准确性。我不知道你是否可以保证每50毫秒执行一次。

答案 1 :(得分:0)

根据您的要求,我建议您使用适合您的req的计划(Runnable命令,长延迟,TimeUnit单位)。方法scheduleAtFixedRate递增延迟。第一次执行是在1000毫秒之后,然后是1000 + 50,然后是1000 + 50 * 2,依此类推。