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.
Java ThreadPoolExecutor remove() MethodThe remove() method of ThreadPoolExecutor class removes this task from the executor's internal queue if it is present, thus causing it not to be run if it has not already started.
After calling shutdown on a ExecutorService, no new Task will be accepted. This means you have to create a new ExecutorService for each round of tasks.
You can reuse the executor service if you restructure your code somewhat. Basically you collect all your tasks, execute them, and await execution before proceeding. Of course, you could also alternatively just use a new Executor Service for each of your time steps, but at least you have options.
Two different methods are provided for shutting down an ExecutorService . The shutdown() method will allow previously submitted tasks to execute before terminating, while the shutdownNow() method prevents waiting tasks from starting and attempts to stop currently executing tasks.
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()
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With