如何定義線程池參數性能
CPU密集型 => 線程池的大小推薦爲CPU數量 + 1,CPU數量能夠根據Runtime.availableProcessors方法獲取線程
IO密集型 => CPU數量 * CPU利用率 * (1 + 線程等待時間/線程CPU時間)接口
混合型 => 將任務分爲CPU密集型和IO密集型,而後分別使用不一樣的線程池去處理,從而使每一個線程池能夠根據各自的工做負載來調整隊列
阻塞隊列 => 推薦使用有界隊列,有界隊列有助於避免資源耗盡的狀況發生資源
拒絕策略 => 默認採用的是AbortPolicy拒絕策略,直接在程序中拋出RejectedExecutionException異常【由於是運行時異常,不強制catch】,這種處理方式不夠優雅。處理拒絕策略有如下幾種比較推薦:io
在程序中捕獲RejectedExecutionException異常,在捕獲異常中對任務進行處理。針對默認拒絕策略 使用CallerRunsPolicy拒絕策略,該策略會將任務交給調用execute的線程執行【通常爲主線程】,此時主線程將在一段時間內不能提交任何任務,從而使工做線程處理正在執行的任務。此時提交的線程將被保存在TCP隊列中,TCP隊列滿將會影響客戶端,這是一種平緩的性能下降 自定義拒絕策略,只須要實現RejectedExecutionHandler接口便可 若是任務不是特別重要,使用DiscardPolicy和DiscardOldestPolicy拒絕策略將任務丟棄也是能夠的線程池