Pab*_*ruz 30 java multithreading exception-handling executor
我有以下问题,我想知道究竟发生了什么.我使用Java的ScheduledExecutorService每五分钟运行一次任务.它工作得很好.执行者彻底改变了我在Java中进行线程编程的方式.
现在,我浏览了Java Doc,了解有关在计划任务因未处理的异常而失败但无法找到任何内容时的行为.
下一个计划任务是否仍会运行?如果存在未处理的异常,则计划的执行程序会停止计划任务吗?有人能指出有关这个简单问题的信息吗?
非常感谢.
Lac*_*lan 29
两者的Javadoc scheduleAtFixedRate并scheduleWithFixedDelay说"如果任务的任何执行遇到异常,后续的执行都会被抑制." 我没有发现它完全清晰,但似乎是说如果你的run方法抛出任何类型的异常,那么调度程序将有效地放弃该任务.通过该调度程序运行的任何其他任务都不应受到影响.它应该不难测试它实际上做了什么......
取消任务可能不一定是件坏事.如果run方法抛出a RuntimeException,它可能在某个地方出现了一个bug,并且系统的状态是未知的.但至少我建议捕获RuntimeException你的run方法,并在SEVERE记录完整的堆栈跟踪.您可能希望根据具体情况重新抛出取消任务.但无论哪种方式,你都需要记录,以便有机会解决出错的问题.