2
我試圖實現一個使用ThreadSafeClientConnManager
的項目,其中20個作爲池中的最大線程數。現在,根據流量,我想在運行時更改線程數。可以做到嗎?在運行時更改java中Pooling連接管理器中的線程數
我有一個解決方案,可以工作的是,我有一組新的線程池,我在更改最大連接時初始化,然後替換現有的線程池。種緩衝開關。但我不確定這是否是最佳解決方案。
我試圖實現一個使用ThreadSafeClientConnManager
的項目,其中20個作爲池中的最大線程數。現在,根據流量,我想在運行時更改線程數。可以做到嗎?在運行時更改java中Pooling連接管理器中的線程數
我有一個解決方案,可以工作的是,我有一組新的線程池,我在更改最大連接時初始化,然後替換現有的線程池。種緩衝開關。但我不確定這是否是最佳解決方案。
我假設你現在使用的是Executors.newFixedThreadPool
。不幸的是,該池不能動態調整大小。
自適應的更好的解決方案是Executors.newCachedThreadPool
。看看javadoc。
調用執行將重用先前構造的線程,如果 可用。如果沒有現有的線程可用,則將新建一個線程 ,並將其添加到池中。尚未用於 六十秒的線程被終止並從緩存中移除。
你可以顯示一些代碼,顯示你如何在新的池中交換? – Gray 2012-02-28 18:00:22
爲什麼不給它最大的最大線程數?空閒線程不會帶來太多的開銷。 – 2012-02-28 18:33:23
原因是最大連接通常是每個主機最大連接的倍增因子。因此,如果我給每個主機的最大值和最大連接數設置爲max,則可能有一個連接可能會佔用線程池中的所有線程。 – 2012-03-12 23:17:54