Java獲取CPU數量及線程池怎樣設置最大線程數量公式

一、Java獲取CPU核數代碼:java

System.out.println(Runtime.getRuntime().availableProcessors()); //輸出本機CPU的數量,是一個數字


二、線程池設置最大線程數量公式:
服務器

(1)線程池大小 = CPU的數量 × 目標CPU的使用率 × (1+等待時間與計算時間的比)spa

(2)通常狀況:線程

IO密集型應用,則線程池大小設置爲 2N+1 (N爲CPU數量,下同)3d

CPU密集型應用,則線程池大小設置爲 N+1code

IO密集型和 CPU密集型簡單來講就是看服務器是注重CPU運算仍是IO傳輸

三、在項目中必定要注意線程池的使用要嚴謹,不要使用Executors去直接調用API去建立線程池,要使用ThreadPoolExecutor(阿里內部也明確規定這一點)

blog

(1)七大參數隊列

ExecutorService service = new ThreadPoolExecutor(//一、核心線程 二、最大線程
                5, 5, 0, TimeUnit.SECONDS,//三、空閒等待時間 四、等待時間單位
                new ArrayBlockingQueue<>(5), Executors.defaultThreadFactory(),//五、等待隊列 六、線程工廠
                new ThreadPoolExecutor.AbortPolicy());//七、拒絕策略

(2)四種拒絕策略:
在這裏插入圖片描述
(3)四種阻塞隊列:

圖片

一、SynchronousQueue ----- 直接提交隊列
二、ArrayBlockingQueue -----有界任務隊列
三、LinkedBlockingDeque ----無界任務隊列
四、PriorityBlockingQueue —優先任務隊列


get

有用點個關注,手留餘香! 😗 😗 😗

相關文章
相關標籤/搜索