2012-02-28 2 views
2

Я пытаюсь реализовать проект, который использует ThreadSafeClientConnManager, с 20 как максимальные потоки в пуле. Теперь, в зависимости от трафика, я хочу изменить количество потоков во время выполнения. Можно ли это сделать?Изменение количества потоков в диспетчере соединений в java во время выполнения

У меня есть одно решение, которое может работать, у меня есть новый набор threadpool, который я инициализирую при изменении максимальных соединений, а затем заменяю существующий. Вид буферного переключателя. но я не уверен, что это оптимальное решение.

+0

Можете ли вы показать часть своего кода, показывающую, как вы обмениваетесь в новом пуле? – Gray

+0

Почему бы вам не дать максимум, максимальное количество потоков? Неработающие потоки не дают больших накладных расходов. –

+0

Причина в том, что максимальное соединение обычно является коэффициентом умножения максимальных соединений на хост. Таким образом, если я даю max как максимальным для каждого хоста, так и максимальным соединениям одинаковым, возможно, что одно соединение может потреблять все потоки в моем пуле потоков. –

ответ

2

Предполагаю, что теперь вы используете Executors.newFixedThreadPool. К сожалению, этот пул нельзя изменять динамически.

Лучшим решением, которое является адаптивным, будет Executors.newCachedThreadPool. Взгляните на javadoc.

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

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