2015-07-28 3 views
1

Я вызываю внешний API с 10 потоками в fixedThreadPool. Теперь я хочу динамически уменьшить это количество потоков, поскольку хост API не способен обрабатывать эти многочисленные запросы в 10 потоках. Я хочу уменьшить количество потоков до 5. И я хочу сделать это без перезапуска приложения, т. Е. Я хочу динамически изменять размер пула потоков фиксированного размера. Я могу вызвать setCorePoolSize (int) и setMaximumPoolSize (int) в моем ThreadPoolExecutor. Тем не менее, javadoc говорит:Динамически меняет размер Threadpool

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

Так что, когда они говорят: «избыточные существующие потоки будут прекращены, когда они рядом неактивны», когда избыточные существующие потоки будут неактивны? Если моя очередь задач всегда заполнена, могут ли эти лишние существующие потоки простаивать?

+0

Маловероятно, что это действительно важно, есть ли у вас пять или десять потоков. Это не имеет значения, даже на моей почти 30-летней Amiga500. Если вы хотите ограничить доступ к ограниченному ресурсу, вы пытаетесь использовать неправильный инструмент для работы. Посмотрите на семафор или подобное ... – Holger

ответ

5

Теперь я хочу динамически уменьшить это число потоков, поскольку хост API не может обрабатывать эти многочисленные запросы в 10 потоках.

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

Когда избыточные существующие потоки перестанут работать?

Когда они не имели задачу выполнить некоторое время (в минуте по умолчанию)

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

no. Это зависит от настройки пула потоков в том случае, когда поток удаляется, а по умолчанию - 1 минута.

Смежные вопросы