我有一个 ScheduledThreadPoolExecutor,它有一个线程,每 30 秒运行一次。
现在,如果当前执行的线程抛出一些异常,那么我需要确保下一个线程不会运行并且 ScheduledThreadPoolExecutor 已关闭。
如何实现这一目标?
最佳答案
捕获 ExecutorService 中调用 shutdown/shutdownNow API 的异常
关闭()
启动有序关闭,其中执行先前提交的任务,但不会接受新任务。如果已经关闭,调用不会产生额外的效果。 该方法不等待之前提交的任务完成执行。 使用awaitTermination来做到这一点。
shutdownNow()
尝试停止所有正在执行的任务,停止正在等待的任务的处理,并返回正在等待执行的任务的列表。 此方法不等待主动执行的任务终止。 使用awaitTermination来做到这一点。
除了尽最大努力尝试停止处理主动执行的任务之外,没有任何保证。例如,典型的实现将通过 Thread.interrupt() 取消,因此任何无法响应中断的任务可能永远不会终止。
请参阅这些帖子以了解工作代码的更多详细信息。
关于java - 如何停止下一个线程在 ScheduledThreadPoolExecutor 中运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37318461/