在Java程序中,我调用Executors.newSingleThreadScheduledExecutor();
来创建一个执行程序,我随后用它来安排两个任务。这些任务有不同的固定延迟,如下所示:
executor.scheduleWithFixedDelay(task1, 0, 5000, TimeUnit.MILLISECONDS);
executor.scheduleWithFixedDelay(task2, 0, 100000, TimeUnit.MILLISECONDS);
我测试了这部分程序的延迟较小,并按预期工作。然而,在生产中,它有时在一天后停止,有时在一周左右后停止而不记录任何例外。为了安全起见并遵循相关问题中给出的建议,我将这两项任务都包含在
中try {
doStuff();
} catch (Throwable th) {
logStuff();
}
问题仍然存在,我检查了是否正确配置了日志记录。它是。
在newSingleThreadScheduledExecutor()
方法的文档中,提到了
保证执行任务 按顺序,任何一个任务都不会超过一个 给定时间。
这适合我,我不明白为什么程序会在没有任何明显问题的情况下退出。
这种执行者是否适合上述情况?有任何陷阱吗?什么可能出错并且不被注意?