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

时间:2010-10-24 12:38:13

标签: java multithreading concurrency

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

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

我发现ThreadPoolExecutor中没有“清除队列”方法,而“清除”方法听起来对此不好。

我该怎么办?

我只是想调用此执行器的“shutdown”并重新创建一个新的执行器,不确定它是否合适。

2 个答案:

答案 0 :(得分:7)

你试过这个吗?

ThreadPoolExecutor pool = .....;  pool.remove(task);

任务是您要删除的Runnable。

或者如果你想清除队列。

pool.getQueue().clear() 

答案 1 :(得分:4)

ThreadPoolExecutorremove()方法。您可以将其与getQueue()结合使用,也可以保留自己已排队且可能需要删除的Runnable集合。如果你保留自己的收藏品,请记得有一些机械设备在完成后从你的收藏品中移除它。