Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JAVA-取消运行任务的ThreadPoolExecutor_Java_Multithreading_Threadpool_Task - Fatal编程技术网

JAVA-取消运行任务的ThreadPoolExecutor

JAVA-取消运行任务的ThreadPoolExecutor,java,multithreading,threadpool,task,Java,Multithreading,Threadpool,Task,我需要的是一种类似于Shutdownow的方法,但是,在这之后,我可以提交新任务。我的ThreadPoolExecutor将在程序执行期间接受随机数目的任务 为什么不创建您自己的展现这种行为的ExecutorService?仅仅执行getQueue()并清除它还不够吗?如果确实需要尝试停止运行任务,则需要对ThreadPoolExecutor进行子类化,并从本质上重新实现shutdownNow(),但只复制向每个线程发送中断的位。请注意,这仍然不能保证您将实际导致它们立即停止并不再进行进一步计算

我需要的是一种类似于Shutdownow的方法,但是,在这之后,我可以提交新任务。我的ThreadPoolExecutor将在程序执行期间接受随机数目的任务

为什么不创建您自己的展现这种行为的
ExecutorService

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

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


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

是否存在关闭当前ExecutorService并替换为新ExecutorService的选项?我已尝试重新实现shutdownNow(),但有些变量是私有的,没有它们,我无法完成我想要的任务…谢谢,关于您的解决方案,我唯一的问题是集合的大小,因为我的ThreadPoolExecutor将接收无限的任务。但有了一个映射和覆盖submit和afterExecute,我就可以只通过运行任务来维护我的集合。