JAVA - 取消ThreadPoolExecutor运行任务

时间:2010-05-13 17:24:45

标签: java multithreading threadpool task

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

4 个答案:

答案 0 :(得分:8)

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

使用此解决方案,Exectuor仍在运行,任何正在运行的任务都会被取消,或者如果它们已排队,则不会运行。

答案 1 :(得分:0)

为什么不创建自己展示此行为的ExecutorService

答案 2 :(得分:0)

查看getQueue()方法。我很确定清除它会起作用(但不会测试)。

答案 3 :(得分:-1)

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