#multithreading
#многопоточность
Вопрос:
Я установил corePoolSize равным 10, а maximumPoolSize — целому числу.MAX_VALUE .
теперь я увеличил corePoolSize до 15, а функция getPoolSize() показала 15 потоков.
После этого я снова уменьшил corePoolSize до 10, на этот раз getPoolSize() показывает 15. И запущено 15 потоков.
Мне нужно только количество потоков в пуле потоков как corePoolSize, и я не хочу изменять значение maximumPoolSize. Я также не хочу исправлять corePoolSize.
Как это может быть возможно?
Ответ №1:
Документы для setCorePoolSize
состояния:
Если новое значение меньше текущего, избыточные существующие потоки будут завершены, когда они в следующий раз станут простаивать.
У вашего пула потоков всегда много работы? Если вы заставите его бездействовать, обнаружите ли вы, что потоки умирают в этот момент? Возможно, вы захотите вызвать setKeepAlive
, чтобы установить очень короткое время ожидания (потенциально 0), по крайней мере временно.
Я подозреваю, что, хотя есть еще больше задач для обработки, это сохранит существующие потоки живыми — что имеет смысл, учитывая, что вы в основном сказали, что вас устраивает наличие «10 или более» потоков. Если вам нужно обработать более 10 задач, почему бы ему не продолжать их обрабатывать?