如何中断执行器服务的线程
2022-09-01 02:06:44
使用返回的 时,如何中断它?ExecutorService
Executors.newSingleThreadExecutor()
使用返回的 时,如何中断它?ExecutorService
Executors.newSingleThreadExecutor()
为此,您需要将任务提交()
到 ,而不是调用 。执行此操作时,将返回可用于操作计划任务的 。特别是,您可以对关联的 调用 cancel(true)
来中断当前正在执行的任务(或者如果任务尚未开始运行,则完全跳过执行)。ExecutorService
execute()
Future
Future
顺便说一句,Executors.newSingleThreadExecutor()
返回的对象实际上是一个 .ExecutorService
中断执行程序的内部管理线程的另一种方法是在 上调用该方法。但是,请注意,与@erickson的解决方案相反,这将导致整体不适合进一步使用。shutdownNow(..)
ExecutorService
ThreadPoolExecutor
我发现这种方法在不再需要的情况下特别有用,并且没有必要密切关注实例(一个主要的例子是您的应用程序的方法)。ExecutorService
Future
exit(..)
来自javadocs的相关信息:ExecutorService#shutdownNow(..)
尝试停止所有正在执行的任务,暂停等待任务的处理,并返回等待执行的任务的列表。
除了尽最大努力停止处理主动执行的任务之外,没有其他保证。例如,典型的实现将通过 Thread.interrupt 取消,因此任何无法响应中断的任务可能永远不会终止。