【发布时间】:2010-05-13 17:24:44
【问题描述】:
我需要的是一个类似于shutdownNow的方法,但是,之后能够提交新任务。我的 ThreadPoolExecutor 将在我的程序执行期间接受随机数量的任务。
【问题讨论】:
-
是否存在关闭当前 ExecutorService 并将其替换为新的选项?
标签: java multithreading threadpool task
我需要的是一个类似于shutdownNow的方法,但是,之后能够提交新任务。我的 ThreadPoolExecutor 将在我的程序执行期间接受随机数量的任务。
【问题讨论】:
标签: java multithreading threadpool task
您可以获取每个提交的 Future,将该 Future 存储在一个集合中,然后当您想取消任务时,调用所有排队任务的 future.cancel()。
使用此解决方案,Exectuor 仍在运行,任何正在运行的任务都将被取消或在排队时不会运行。
【讨论】:
为什么不创建自己的 ExecutorService 来展示这种行为?
【讨论】:
仅仅执行 getQueue() 并清除它还不够吗?如果您确实需要尝试停止正在运行的任务,则需要将 ThreadPoolExecutor 子类化并从本质上重新实现 shutdownNow() 但只复制向每个线程发送中断的位。请注意,这仍然不能保证您实际上会导致它们立即停止并且不再进行计算。如果您需要这样做,您将需要一种完全不同的方法。
【讨论】: