2 回答
TA贡献2021条经验 获得超8个赞
的 javadoc 的完整引用shutdown()
:
启动有序关闭,其中执行先前提交的任务,但不会接受新任务。如果已经关闭,调用没有额外的效果。
此方法不等待先前提交的任务完成执行。使用
awaitTermination
这样做。
关闭执行程序可防止提交新任务。
已经提交的任务,无论是开始还是在队列中等待,都会完成执行。
如果您不想执行排队任务,请调用shutdownNow()
:
尝试停止所有正在执行的任务,停止等待任务的处理,并返回等待执行的任务列表。从该方法返回后,这些任务将从任务队列中排出(移除)。
此方法不会等待主动执行的任务终止。使用
awaitTermination
这样做。除了尽力尝试停止处理正在执行的任务之外,没有任何保证。此实现通过 取消任务
Thread.interrupt()
,因此任何未能响应中断的任务可能永远不会终止。
已启动的任务是否停止取决于任务,如最后一段所述。
TA贡献1876条经验 获得超5个赞
在 的文档中ThreadPoolExector#shutdown
,还有一句:
此方法不等待先前提交的任务完成执行。使用 awaitTermination 来做到这一点。
在这种情况下,这意味着调用者线程不会等待先前提交的任务完成执行。换句话说,shutdown()
不会阻塞调用者线程。
如果您确实需要阻止调用者线程,请使用ThreadPoolExector#awaitTermination(long timeout, TimeUnit unit)
:
阻塞直到所有任务在关闭请求后完成执行,或者超时发生,或者当前线程被中断,以先发生者为准。
添加回答
举报