我对ExecutorService#shutdown方法的 javadoc 感到困惑。这些不是自相矛盾的说法吗?
启动有序关闭,其中执行先前提交的任务,但不会接受新任务。此方法不等待先前提交的任务完成执行。使用 awaitTermination 来做到这一点。
如果它可以有序地关闭之前提交的任务,那它怎么不能等待它们完成执行呢?
我对ExecutorService#shutdown方法的 javadoc 感到困惑。这些不是自相矛盾的说法吗?
启动有序关闭,其中执行先前提交的任务,但不会接受新任务。此方法不等待先前提交的任务完成执行。使用 awaitTermination 来做到这一点。
如果它可以有序地关闭之前提交的任务,那它怎么不能等待它们完成执行呢?
这意味着该方法会立即在您调用它的线程中返回,但尚未执行的任务可能仍在其他线程中运行。
如果你想让你的程序等到之前提交的任务完成,你必须awaitTermination
在调用shutdown
.
这意味着任务将运行完成,但此方法将立即返回,而无需等待它发生。
因此,要在不终止任何任务的情况下干净地关闭执行程序,您将执行以下操作:
executor.shutdown();
executor.awaitTermination(long timeout, TimeUnit unit);
或者,如果您只想尽快停止执行程序,请使用shutdownNow()
.