Размер пула = 8, активные потоки = 0, задачи в очереди = 0, выполненные задачи = 5678. Почему активные потоки равны 0, когда пул потоков активен. Может ли кто-нибудь объяснить мне это. Это должно быть больше 0, верно?

0
Pavani 27 Апр 2020 в 18:22
2
Поскольку кода нет, я просто мог предположить, что вы читаете атрибуты после завершения выполнения, поэтому исполнителем больше не заняты никакие потоки.
 – 
Lecagy
27 Апр 2020 в 18:24

1 ответ

ТЛ ; др

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

allowCoreThreadTimeOut( true )

Цитата из раздела Keep-alive times документа ThreadPoolExecutor Javadoc:

По умолчанию политика поддержания активности применяется только в том случае, если потоков больше, чем corePoolSize, но метод allowCoreThreadTimeOut(boolean) можно использовать для применения этой политики тайм-аута и к основным потокам, пока поскольку значение keepAliveTime не равно нулю.

Передайте true или false этому методу, чтобы:

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

setCorePoolSize( 0 )

Если вы установите размер основного пула равным нулю, все потоки в конечном итоге прекратят работу по тайм-ауту. В этом случае установка allowCoreTheadTimeOut не имеет значения.

См. раздел Reclamation на этой странице Javadoc:

Вы можете настроить пул так, чтобы все неиспользуемые потоки в конечном итоге умирали, задав соответствующее время поддержания активности, используя нижнюю границу нулевых потоков ядра и/или задав параметр allowCoreThreadTimeOut(boolean).

2
Basil Bourque 27 Апр 2020 в 18:55
Спасибо. Этот пул потоков был создан фреймворком Spring, у меня его нет. Я уверен, что размер ядра не равен нулю. Этот пул потоков предназначен для исходящего канала для отправки данных клиентам в webscokets. Я вижу, что данные отправляются клиенту в виде непрерывного потока, но активный счетчик равен нулю из пула потоков. Итак, как вы сказали, есть возможность отключить бездействующие потоки размера основного пула, и вы думаете, что по этой причине я могу видеть активные потоки как 0?
 – 
Pavani
14 Май 2020 в 12:58
Чтобы получить более конкретный ответ, вам нужно опубликовать более конкретный код, MCVE.
 – 
Basil Bourque
14 Май 2020 в 18:39