2015-02-15 2 views
0

У меня есть несколько задач, которые создаются каким-то событием. Я хочу выполнять последние несколько задач (предположим 6) всегда.Пул блокировки пула потоков Java, выполнять всегда последние несколько

Я использую фиксированный пул потоков. Но проблема, с которой я сталкиваюсь, заключается в том, что она использует внутреннюю блокирующую очередь. Я хочу отключить задачи из очереди блокировки, если появляются новые задачи, не нажимая их на исполнителя. Как я могу это достичь? Есть ли другой подход к этой проблеме?

+0

Дубликат [Java-исполнителей: как установить приоритет задачи?] (Http://stackoverflow.com/questions/3198660/java-executors-how-can-i-set -task-priority). Установите более высокий приоритет для новых задач, и исполнитель запустит их первым. Вам нужно будет определить, какие атрибуты использовать в качестве приоритета. – Augusto

+1

@Augusto Я также хочу удалить старые задачи с низким приоритетом. – ralph

ответ

0

Для того, чтобы сделать то, что вы хотите, вы можете использовать ScheduledThreadPoolExecutor. И установите флаг setRemoveOnCancelPolicy(true).

Этот исполнитель возвращает Future, когда вы вызываете методы submit. Эти фьючерсы имеют метод cancel(), который вы можете вызывать, когда приходит новый запрос. Вы даже можете отменить выполняемые в настоящее время задачи, если хотите.

Есть еще одна альтернатива для звонка ThreadPoolExecutor.getQueue().clear(), но это небезопасно! Поэтому, пожалуйста, не пробуйте :)

 Смежные вопросы

  • Нет связанных вопросов^_^