Что означает «активные потоки» в ThreadPoolExecutor? - PullRequest
2 голосов
/ 05 августа 2020

У меня есть ThreadPoolExecutor со следующими параметрами:

corePoolSize = 20
maximumPoolSize = 100
workQueue = new LinkedBlockingQueue(10)

Каждую секунду я отправляю 1 тыс. Задач. Задачи представляют собой некоторые операции ввода-вывода, которые занимают 1-2 секунды. Некоторые из них получают отказ. Ожидается. Я регистрирую состояние пула потоков перед отклонением, используя настраиваемую политику AbortPolicy.

В журналах я вижу то, что не могу объяснить. Сообщения вида:

java .util.concurrent. ThreadPoolExecutor@3e6be2d8 [Выполняется, размер пула = 100, активные потоки = 2 , задачи в очереди = 10, завершенные задачи = 4471827].

Я обнаружил в документации, что getActiveCount method Returns the approximate number of threads that are actively executing tasks. Но это не помогает мне понять ...

Что означает «активные потоки» Вот? И почему только 2 потока активны, пока пул достиг своего предела, очередь заполнена и задача отклонена?

Я хочу увеличить maximumPoolSize, чтобы обрабатывать больше задач одновременно, но сначала мне нужно понять, могу ли я эффективно использовать ресурсы ThreadPool.

1 Ответ

2 голосов
/ 05 августа 2020

«Активный поток» означает поток, который начал выполнение задачи из рабочей очереди.

Когда потоки запускаются или становятся свободными, они не берут задачу «немедленно» - есть разногласия прочитал из очереди. Если вы отправите исполнителю 100 задач в сжатые сроки oop, вполне вероятно, что к концу только несколько рабочих потоков получили возможность поднять задачу.

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

...