是否应使用单线程预定执行程序来安排具有不同延迟的两个任务?

时间:2016-11-08 11:59:30

标签: java scheduled-tasks

在Java程序中,我调用Executors.newSingleThreadScheduledExecutor();来创建一个执行程序,我随后用它来安排两个任务。这些任务有不同的固定延迟,如下所示:

executor.scheduleWithFixedDelay(task1, 0, 5000, TimeUnit.MILLISECONDS);
executor.scheduleWithFixedDelay(task2, 0, 100000, TimeUnit.MILLISECONDS);

我测试了这部分程序的延迟较小,并按预期工作。然而,在生产中,它有时在一天后停止,有时在一周左右后停止而不记录任何例外。为了安全起见并遵循相关问题中给出的建议,我将这两项任务都包含在

try {
    doStuff();
} catch (Throwable th) {
    logStuff();
}

问题仍然存在,我检查了是否正确配置了日志记录。它是。

newSingleThreadScheduledExecutor()方法的文档中,提到了

  

保证执行任务         按顺序,任何一个任务都不会超过一个         给定时间。

这适合我,我不明白为什么程序会在没有任何明显问题的情况下退出。

这种执行者是否适合上述情况?有任何陷阱吗?什么可能出错并且不被注意?

0 个答案:

没有答案