How to remove old queued tasks in ThreadPoolExecutor and insert new tasks instead?

concurrency, java, multithreading

Solution

Have you tried this?

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

task is the Runnable you want to remove.

or if you want to clear the queue.

pool.getQueue().clear() 

Problem

I load a lot of images form internet with a ThreadPoolExecutor. When new images found, I need to render it first, in that case I want to abandon the old tasks which are still queued in the ThreadPoolExecutor and added these new items to download. I found there are no "clear queue" method in ThreadPoolExecutor, and "purge" method sounds like not good for this. What should I do? I just thought to call "shutdown" of this executor and recreate a new one to do this, not sure whether it is appropriate.

Original source