java - 如何停止下一个线程在 ScheduledThreadPoolExecutor 中运行

标签 java multithreading executorservice threadpoolexecutor executor

我有一个 ScheduledThreadPoolExecutor,它有一个线程,每 30 秒运行一次。

现在,如果当前执行的线程抛出一些异常,那么我需要确保下一个线程不会运行并且 ScheduledThreadPoolExecutor 已关闭。

如何实现这一目标?

最佳答案

捕获 ExecutorService 中调用 shutdown/shutdownNow API 的异常

关闭()

启动有序关闭,其中执行先前提交的任务,但不会接受新任务。如果已经关闭,调用不会产生额外的效果。 该方法不等待之前提交的任务完成执行。 使用awaitTermination来做到这一点

shutdownNow()

尝试停止所有正在执行的任务,停止正在等待的任务的处理,并返回正在等待执行的任务的列表。 此方法不等待主动执行的任务终止。 使用awaitTermination来做到这一点

除了尽最大努力尝试停止处理主动执行的任务之外,没有任何保证。例如,典型的实现将通过 Thread.interrupt() 取消,因此任何无法响应中断的任务可能永远不会终止。

请参阅这些帖子以了解工作代码的更多详细信息。

How to forcefully shutdown java ExecutorService

关于java - 如何停止下一个线程在 ScheduledThreadPoolExecutor 中运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37318461/

相关文章:

Java ThreadPoolExecutor 处理时挂起

java - 伪代码: Random Permutation

java - GSSException : [. .] 不支持/启用使用 HMAC SHA1-96 的加密类型 AES256CTS 模式

c++ - 我是否需要在 1 核机器上明确禁用 OpenMP?

java - ListenableFuture 或调用函数来处理任务结果?

java - 抛出 InterruptedException 时不会清除线程中断状态

java - Android Studio - 锁定手机时不要关闭应用程序

java - 如何计算 ArrayList 中单词出现的次数?

c - 我们如何检查我们的程序多线程是否在我们的程序中工作?

c++ - 为什么多线程没有加速数组的简单复制?