После использования ThreadPoolExecutor в Java не осталось потоков - PullRequest
0 голосов
/ 27 апреля 2020

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

1 Ответ

2 голосов
/ 27 апреля 2020

tl; dr

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

allowCoreThreadTimeOut( true )

To цитата из раздела Keep-alive ThreadPoolExecutor Javado c:

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

Передайте значение true или false этому методу:

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

setCorePoolSize( 0 )

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

См. Раздел Восстановление этой страницы Javado c:

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

...