使用 ExecutorService
返回的 Executors.newSingleThreadExecutor()
时,如何中断它?
原文由 Ofek Ron 发布,翻译遵循 CC BY-SA 4.0 许可协议
使用 ExecutorService
返回的 Executors.newSingleThreadExecutor()
时,如何中断它?
原文由 Ofek Ron 发布,翻译遵循 CC BY-SA 4.0 许可协议
中断执行程序的内部管理线程的另一种方法是在您的 ExecutorService
上调用 shutdownNow(..)
方法。但是请注意,与@erickson 的解决方案相反,这将导致整个 ThreadPoolExecutor
变得不适合进一步使用。
我发现这种方法在不再需要 ExecutorService
并且不再需要关注 Future
实例的情况下特别有用(一个典型的例子是 exit(..)
你的申请方法)。
来自 ExecutorService#shutdownNow(..)
javadocs的相关信息:
尝试停止所有正在执行的任务,停止等待任务的处理,并返回等待执行的任务列表。
除了尽最大努力停止处理正在执行的任务之外,没有任何保证。例如,典型的实现将通过 Thread.interrupt 取消,因此任何未能响应中断的任务可能永远不会终止。
原文由 Priidu Neemre 发布,翻译遵循 CC BY-SA 3.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答6k 阅读
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
为此,您需要将
submit()
任务交给ExecutorService
,而不是调用execute()
。执行此操作时,将返回一个Future
可用于操作计划任务。特别是,您可以在关联的cancel(true)
Future
来中断当前正在执行的任务(如果任务尚未开始运行,则完全跳过执行)。顺便说一句,
Executors.newSingleThreadExecutor()
返回的对象实际上是一个ExecutorService
。