Очередь блокировки пула потоков Java, выполнять всегда последние несколько

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

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


person ralph    schedule 15.02.2015    source источник
comment
Дубликат Исполнители Java: как установить приоритет задачи? - Установите более высокий приоритет для новых задач, и исполнитель будет запускать их в первую очередь. Вам нужно будет определить, какие атрибуты использовать в качестве приоритетных.   -  person Augusto    schedule 15.02.2015
comment
@Augusto, я также хочу удалить старые задачи с низким приоритетом.   -  person ralph    schedule 15.02.2015


Ответы (1)


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

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

Есть и другой вариант вызова ThreadPoolExecutor.getQueue().clear(), но это небезопасно! Так что не пытайтесь :)

person Augusto    schedule 15.02.2015