Динамический пул потоков

У меня длительный процесс, который слушает события и выполняет интенсивную обработку.

В настоящее время я использую Executors.newFixedThreadPool(x) чтобы ограничить число заданий, которые выполняются одновременно, но в зависимости от времени суток и других различных факторов, я хотел бы иметь возможность динамически увеличивать или уменьшать количество одновременных потоков.

Если я уменьшу количество одновременных потоков, я хочу, чтобы текущие выполняемые задания хорошо заканчивались.

Существует ли библиотека Java, которая позволяет мне контролировать и динамически увеличивать или уменьшать количество одновременно работающих потоков в пуле потоков? (Класс должен реализовывать ExecutorService).

Должен ли я реализовать это сам?

1 ответ

Решение

Посмотрите на API ниже в ThreadPoolExecutor

public void setCorePoolSize(int corePoolSize)

Устанавливает количество ядер. Это переопределяет любое значение, установленное в конструкторе.

Если новое значение меньше текущего значения, избыточные существующие потоки будут прерваны, когда они в следующий раз станут свободными.

Если больше, новые потоки, при необходимости, будут запущены для выполнения любых задач в очереди.

Инициализация:

ExecutorService service = Executors.newFixedThreadPool(5); 

При необходимости измените размер пула потоков с помощью приведенного ниже API.

((ThreadPoolExecutor)service).setCorePoolSize(newLimit);//newLimit is new size of the pool 

Важная заметка:

Если очередь заполнена, а новое значение числа потоков больше или равно значению maxPoolSize, определенному ранее, задача будет отклонена.

Так что установите значения maxPoolSize а также corePoolSize должным образом.

Другие вопросы по тегам