【问题标题】:Does ExecutorService.shutDown() cancel existing tasks? [duplicate]ExecutorService.shutDown() 是否取消现有任务? [复制]
【发布时间】:2012-03-28 09:49:23
【问题描述】:

我正在检查 ExecutorService#shutDown() 方法的javadoc,它指出:

启动有序关闭,其中之前提交的任务被执行,但不会接受新任务。如果已经关闭,则调用不会产生额外的影响。

我将“被执行”理解为:它会等到之前提交的任务完成执行。但它也指出:

此方法不等待先前提交的任务完成执行。使用 awaitTermination 来做到这一点。

好像是说取消了已经提交的任务。

有人能澄清一下调用shutdown时会发生什么并且一些以前提交的任务还没有完成执行吗?

编辑
我使用执行器来启动一些任务,但之后我不再需要执行器,所以我想让它知道它可以在任务完成时释放线程。

【问题讨论】:

    标签: java multithreading


    【解决方案1】:

    关键是shutDown 方法返回 没有等待先前提交的任务完成,但它仍然它们完成。您可能想将其视为“开始关闭”的方法。

    【讨论】:

    • 是不是表示关机后排队的任务不会被执行?假设提交了 t1、t2、t3。如果在 t2 正在执行时启动关机,则 t1 已执行且 t3 尚未执行。我希望 t3 能够执行,因为 以前提交的任务已执行,我错了吗
    • @Nilesh:是的,那将被执行。但是shutDown 方法不会等到t3 执行完毕才返回。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-24
    • 2014-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多