Как удалить старые задачи из очереди в ThreadPoolExecutor и вместо этого вставить новые задачи? - PullRequest
6 голосов
/ 24 октября 2010

Я загружаю много изображений из Интернета с помощью ThreadPoolExecutor.

Когда новые изображения найдены, мне нужно сначала их отрендерить, в этом случае я хочу отказаться от старых задач, которые все еще стоят в очереди в ThreadPoolExecutorи добавил эти новые элементы для загрузки.

Я обнаружил, что в ThreadPoolExecutor нет метода "clear queue", и метод "purge" звучит для этого не очень хорошо.

Что мне делать?

Я просто подумал вызвать «выключение» этого исполнителя и заново создать нового, чтобы сделать это, не уверенный, подходит ли он.

Ответы [ 2 ]

7 голосов
/ 24 октября 2010

Вы пробовали это?

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

задача - это Runnable, который вы хотите удалить.

или если вы хотите очистить очередь.

pool.getQueue().clear() 
4 голосов
/ 24 октября 2010

ThreadPoolExecutor имеет метод remove().Вы можете использовать это вместе с getQueue() или сохранить собственную коллекцию Runnable s, которые были в очереди и, возможно, нуждаются в удалении.Если вы храните свою собственную коллекцию, не забывайте о некотором механизме, который удаляет исполняемый файл из вашей коллекции после ее завершения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...