2012-02-28 15 views
2

我試圖實現一個使用ThreadSafeClientConnManager的項目,其中20個作爲池中的最大線程數。現在,根據流量,我想在運行時更改線程數。可以做到嗎?在運行時更改java中Pooling連接管理器中的線程數

我有一個解決方案,可以工作的是,我有一組新的線程池,我在更改最大連接時初始化,然後替換現有的線程池。種緩衝開關。但我不確定這是否是最佳解決方案。

+0

你可以顯示一些代碼,顯示你如何在新的池中交換? – Gray 2012-02-28 18:00:22

+0

爲什麼不給它最大的最大線程數?空閒線程不會帶來太多的開銷。 – 2012-02-28 18:33:23

+0

原因是最大連接通常是每個主機最大連接的倍增因子。因此,如果我給每個主機的最大值和最大連接數設置爲max,則可能有一個連接可能會佔用線程池中的所有線程。 – 2012-03-12 23:17:54

回答

2

我假設你現在使用的是Executors.newFixedThreadPool。不幸的是,該池不能動態調整大小。

自適應的更好的解決方案是Executors.newCachedThreadPool。看看javadoc

調用執行將重用先前構造的線程,如果 可用。如果沒有現有的線程可用,則將新建一個線程 ,並將其添加到池中。尚未用於 六十秒的線程被終止並從緩存中移除。

相關問題