2016-05-06 43 views
3

固定的線程池已被用於通過使一個整數變量來執行人方法等,以限制在Java應用程序的線程的數目低於什麼是固定線程池的理想大小?

Executors.newFixedThreadPool(10); 

假設我們正在設計的任何應用程序和我們使用固定的線程池然後如何我們能否爲理想的固定線程池大小做出決定,或者我們應該在什麼基礎上決定固定的線程池大小?

+0

相關SE問題:http://stackoverflow.com/questions/8307423/java-executorservice-scaling/ –

回答

3

首先,

1)你是否整個應用程序或應用程序中的特定任務創建FixedThreadPool

2.)部署應用程序的服務器支持多少個CPU,每個CPU有多少個線程。

3.)可能會出現這種情況,您分配的線程數量較少,而服務器數量較多,或者可能分配的數量較多,而您的任務不需要太多。這或多或少像浪費資源。

線程池大小應該很少是硬編碼的;相反,池大小應由配置機制提供或通過諮詢Runtime.availableProcessors動態計算。

一個很好的詳細瞭解,請here

+0

感謝Ankur的快速回復。提供的鏈接有回答我的問題的詳細解釋。 – Jai

+1

該鏈接是來自_Java Concurrency In Practice_的第8.2節的盜版(未歸因!)副本。 –

0

如果你正在尋找一個基於公式的方法有一點 - 當然,你可以得到它記住多少個核心都支持,但 很重要的信息,如果您正在將您的應用程序部署到一個容器中,並且您的應用程序是使用框架和庫構建的,您可能已經在您的系統中創建了許多線程池,提供多種服務。除此之外,這些工作(CPU/IO密集型也會發揮重要作用)。所以你最好的選擇是從一些數字開始,然後描述你的應用程序並獲得最佳位置。從here開始(如果您不確定應用程序的環境),一個很好的猜測。您可以通過連接Jconsole輕鬆查看應用程序中的所有線程,並且可以在 MBeans - > java.lang - > Threading - > Attributes中看到彙總。

最終 - 在這些案例中,經驗證據是最好的。