如何在ThreadPoolExecutor中删除旧的排队任务并插入新任务?

vir*_*sir 6 java concurrency multithreading

我使用ThreadPoolExecutor从Internet加载了大量图像.

找到新图像后,我需要先渲染它,在这种情况下,我想放弃仍在ThreadPoolExecutor中排队的旧任务,并添加这些新项目进行下载.

我发现ThreadPoolExecutor中没有"清除队列"方法,而"清除"方法听起来对此并不好.

我该怎么办?

我只是想调用这个执行器的"关闭"并重新创建一个新的执行器,不确定它是否合适.

小智 8

你试过这个吗?

ThreadPoolExecutor pool = .....;  pool.remove(task);
Run Code Online (Sandbox Code Playgroud)

task是您要删除的Runnable.

或者如果要清除队列.

pool.getQueue().clear() 
Run Code Online (Sandbox Code Playgroud)


unh*_*ler 5

ThreadPoolExecutorremove()方法。您可以将其与已排队并可能需要删除getQueue()Runnables的集合结合使用或保留自己的集合。如果您保留自己的集合,请记住有一些机制可以在完成后从集合中删除可运行对象。