看應用是CPU密集型的仍是IO密集型的,仍是混合型的。spa
CPU密集CPU密集型的話,通常配置CPU處理器個數+/-1個線程,所謂CPU密集型就是指系統大部分時間是在作程序正常的計算任務,例如數字運算、賦值、分配內存、內存拷貝、循環、查找、排序等,這些處理都須要CPU來完成。線程
IO密集IO密集型的話,是指系統大部分時間在跟I/O交互,而這個時間線程不會佔用CPU來處理,即在這個時間範圍內,能夠由其餘線程來使用CPU,於是能夠多配置一些線程。code
混合型混合型的話,是指二者都佔有必定的時間。排序
Ncpu=CPU的數量隊列
Ucpu=目標CPU使用率內存
W/C=等待時間與計算時間的比率get
爲保持處理器達到指望的使用率,最優的線程池的大小等於鉤子
Nthreads=Ncpu*Ucpu*(1+W/C)
Java中,能夠經過Runtime.getRuntime().availableProcessors()獲取能夠用的cpu數量。thread
具體線程池大小觀測,能夠經過覆蓋executor的鉤子方法,進行線程池的監控,查看等待隊列大小等等,主要觀察等待隊列的大小以及拒絕的任務多少。監控