Как уменьшить значение размера пула потоков с помощью ThreadPoolExecutor?

#multithreading

#многопоточность

Вопрос:

Я установил corePoolSize равным 10, а maximumPoolSize — целому числу.MAX_VALUE .

теперь я увеличил corePoolSize до 15, а функция getPoolSize() показала 15 потоков.

После этого я снова уменьшил corePoolSize до 10, на этот раз getPoolSize() показывает 15. И запущено 15 потоков.

Мне нужно только количество потоков в пуле потоков как corePoolSize, и я не хочу изменять значение maximumPoolSize. Я также не хочу исправлять corePoolSize.

Как это может быть возможно?

Ответ №1:

Документы для setCorePoolSize состояния:

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

У вашего пула потоков всегда много работы? Если вы заставите его бездействовать, обнаружите ли вы, что потоки умирают в этот момент? Возможно, вы захотите вызвать setKeepAlive , чтобы установить очень короткое время ожидания (потенциально 0), по крайней мере временно.

Я подозреваю, что, хотя есть еще больше задач для обработки, это сохранит существующие потоки живыми — что имеет смысл, учитывая, что вы в основном сказали, что вас устраивает наличие «10 или более» потоков. Если вам нужно обработать более 10 задач, почему бы ему не продолжать их обрабатывать?