我有一个以固定费率完成某些工作的流程:
val scheduler = Executors.newSingleThreadScheduledExecutor()
scheduler.scheduleAtFixedRate(new MigrationWorker(mytask), 1000, 50, TimeUnit.MILLISECONDS)
我的理解是,这应该执行我的任务,中间50毫秒。
在运行它时,我观察到我的任务定期延迟,从日志中,我看到它运行一堆任务,然后暂停约30-60秒,然后做更多。
我想知道是什么原因引起的?
谢谢,
答案 0 :(得分:0)
如果任务运行的时间比分配的窗口长,则可能会看到此类行为。调度程序可能不会启动前一个调度程序未完成的新程序。
另一个问题可能是准确性。我不知道你是否可以保证每50毫秒执行一次。
答案 1 :(得分:0)
根据您的要求,我建议您使用适合您的req的计划(Runnable命令,长延迟,TimeUnit单位)。方法scheduleAtFixedRate递增延迟。第一次执行是在1000毫秒之后,然后是1000 + 50,然后是1000 + 50 * 2,依此类推。