У меня есть 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.