ExecutorService关闭

Par*_*agJ 12 java concurrency java.util.concurrent

我对ExecutorService#shutdown方法的javadoc感到困惑.这些矛盾的陈述不是吗?

启动有序关闭,其中先前提交的任务将被执行,但不会接受任何新任务.此方法不会等待先前提交的任务完成执行.使用awaitTermination来做到这一点.

如果它可以有序地关闭以前提交的任务,那么它怎么能等待它们完成执行呢?

Jes*_*per 13

这意味着该方法立即在您调用它的线程中返回,但是在其他线程中,尚未执行的任务可能仍在运行.

如果您希望程序等到先前提交的任务完成,则必须在调用awaitTermination后调用shutdown.


Chr*_*s B 6

这意味着任务将运行完成,但此方法将立即返回,而不会等待发生.

因此,要干净地关闭执行程序而不执行任何任务,您可以:

executor.shutdown();
executor.awaitTermination(long timeout, TimeUnit unit);
Run Code Online (Sandbox Code Playgroud)

或者,如果您只想尽快停止执行者,请使用shutdownNow().