我对ExecutorService#shutdown方法的javadoc感到困惑。这不是自相矛盾的说法吗?
启动有序关机,执行以前提交的任务,但不接受任何新任务。此方法不等待以前提交的任务完成执行。使用awaitTermination来完成这个任务。
如果它能够有序地关闭以前提交的任务,那么它怎么就不能等待它们完成执行呢?
发布于 2013-04-18 11:32:22
这意味着该方法将在调用它的线程中立即返回,但尚未执行的任务可能仍在其他线程中运行。
如果您想让您的程序等到之前提交的任务完成,则必须在调用awaitTermination之后调用shutdown。
发布于 2013-04-18 11:32:40
这意味着任务将运行到完成,但此方法将立即返回,而不等待这种情况发生。
因此,为了在不杀死任何任务的情况下干净地关闭执行器,您可以这样做:
executor.shutdown();
executor.awaitTermination(long timeout, TimeUnit unit);或者,如果您只想尽快停止执行程序,请使用shutdownNow()。
https://stackoverflow.com/questions/16081716
复制相似问题