0

我有一个以固定速率执行某些工作的过程:

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

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

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

我想知道是什么原因造成的?

谢谢,

4

2 回答 2

0

如果任务的运行时间比分配的窗口时间长,您可能会看到这样的行为。调度器可能不会启动一个新的,前一个是不完整的。

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

于 2013-06-08T23:02:10.020 回答
0

根据您的要求,我建议您使用适合您要求的 schedule(Runnable command, long delay, TimeUnit unit)。方法 scheduleAtFixedRate 增加延迟。第一次执行是在 1000 毫秒之后,然后是 1000+50,然后是 1000+ 50 *2,依此类推。

于 2013-06-08T23:08:22.827 回答