2017-08-29 100 views
2

我是一个正在解决这个ScheduledThreadPoolExecutor问题的新手程序员。如何保证ScheduledThreadPoolExecutor的调度不会突然死亡?

在使用一些Google搜索时,我知道如何使用afterExecute方法处理来自Runnable()部分的异常。现在它归结为这一点。

如果ScheduledThreadPoolExecutor的scheduleAtFixedRate()方法发生错误并且线程突然停止,该怎么办?

换句话说,如果该 误差是执行器类,而不是从Runnable的 实施?

有什么办法,我可以找出错误(重启整个调度)& &处理呢?

谢谢

回答

0

如果有什么错误来自执行人类,而不是从Runnable的 实施?

该错误不是来自执行者类。

有什么办法,我可以找出错误& &处理(通过 重启整个调度)?

是的,你可以使用不同的技术来识别错误并重新启动ScheduledExecutorService,但真正的问题应该是:是正确的事是什么?

如果您可以处理Runnable中的错误,那么最好在那里处理它,而不是重新启动Executor。

+0

感谢您的评论。 那么你是说错误只来自Runnable的实现,所以我不需要打扰? 如果您看到https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Executors.html#newSingleThreadScheduledExecutor(),那么似乎会出现类自身的错误,singlethreadexecutor具有有些事情会因调度自身的失败而恢复工作,而不是来自可运行的实现? – sanghyun

+0

['ScheduledExecutorService']可以引发3个异常(https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ScheduledExecutorService.html#scheduleAtFixedRate(java.lang。 Runnable,%20long,%20long,%20java.util.concurrent.TimeUnit)),并且它们都是由于Runnable的不正确使用或不当行为而发生的。 – alfasin

+0

@sangghyun一个具体的例子在这里会有所帮助 – alfasin