【问题标题】:JAVA - Cancel the ThreadPoolExecutor running tasksJAVA - 取消 ThreadPoolExecutor 正在运行的任务
【发布时间】:2010-05-13 17:24:44
【问题描述】:

我需要的是一个类似于shutdownNow的方法,但是,之后能够提交新任务。我的 ThreadPoolExecutor 将在我的程序执行期间接受随机数量的任务。

【问题讨论】:

  • 是否存在关闭当前 ExecutorService 并将其替换为新的选项?

标签: java multithreading threadpool task


【解决方案1】:

您可以获取每个提交的 Future,将该 Future 存储在一个集合中,然后当您想取消任务时,调用所有排队任务的 future.cancel()。

使用此解决方案,Exectuor 仍在运行,任何正在运行的任务都将被取消或在排队时不会运行。

【讨论】:

  • 谢谢,关于您的解决方案,我唯一的问题是关于集合的大小,因为我的 ThreadPoolExecutor 将接收无限的任务。但是使用 Map 并覆盖 submit 和 afterExecute 我可以只使用正在运行的任务来维护我的集合。
【解决方案2】:

为什么不创建自己的 ExecutorService 来展示这种行为?

【讨论】:

    【解决方案3】:

    仅仅执行 getQueue() 并清除它还不够吗?如果您确实需要尝试停止正在运行的任务,则需要将 ThreadPoolExecutor 子类化并从本质上重新实现 shutdownNow() 但只复制向每个线程发送中断的位。请注意,这仍然不能保证您实际上会导致它们立即停止并且不再进行计算。如果您需要这样做,您将需要一种完全不同的方法。

    【讨论】:

    • 我已经尝试重新实现 shutdownNow() 但有些变量是私有的,没有它们我无法做我想做的事......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-10
    • 2014-08-23
    • 2012-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多