12

我对ExecutorService#shutdown方法的 javadoc 感到困惑。这些不是自相矛盾的说法吗?

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

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

4

2 回答 2

13

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

如果你想让你的程序等到之前提交的任务完成,你必须awaitTermination在调用shutdown.

于 2013-04-18T11:32:22.613 回答
6

这意味着任务将运行完成,但此方法将立即返回,而无需等待它发生。

因此,要在不终止任何任务的情况下干净地关闭执行程序,您将执行以下操作:

executor.shutdown();
executor.awaitTermination(long timeout, TimeUnit unit);

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

于 2013-04-18T11:32:40.050 回答