線程池參數
1、 降低資源消耗;提高線程使用率,降低建立和銷毀線程的消耗。
2、 提高響應速度;任務來了,直接有線程可用可執行,而不是先建立線程,再執行。
3、 提高線程的可管理性;線程是稀缺資源,使用線程池可以統一配置設定調優監控。
- corePoolSize 代表核心線程數,也就是正常情況下建立工作的線程數,這些線程建立後并不會消除,而是一種常駐線程
- maxinumPoolSize 代表的是最大線程數,它與核心線程數相對應,表示最大允許被建立的線程數,比如目前任務較多,将核心線程數都用完了,還無法滿足需求時,此時就會建立新的線程,但是線程池内線程總數不會超過最大線程數
- keepAliveTime 、 unit 表示超出核心線程數之外的線程的空閑存活時間,也就是核心線程不會消除,但是超出核心線程數的部分線程如果空閑一定的時間則會被消除,我們可以通過setKeepAliveTime 來設定空閑時間
- workQueue 用來存放待執行的任務,假設我們現在核心線程都已被使用,還有任務進來則全部放入隊列,直到整個隊列被放滿但任務還再持續進入則會開始建立新的線程
- ThreadFactory 實際上是一個線程工廠,用來生産線程執行任務。我們可以選擇使用預設的建立工廠,産生的線程都在同一個組内,擁有相同的優先級,且都不是守護線程。當然我們也可以選擇自定義線程工廠,一般我們會根據業務來制定不同的線程工廠
- Handler 任務拒絕政策,有兩種情況,第一種是當我們調用 shutdown 等方法關閉線程池後,這時候即使線程池内部還有沒執行完的任務正在執行,但是由于線程池已經關閉,我們再繼續想線程池送出任務就會遭到拒絕。另一種情況就是當達到最大線程數,線程池已經沒有能力繼續處理新送出的任務時,便會拒絕
線程池中阻塞隊列的作用
1、 一般的隊列隻能保證作為一個有限長度的緩沖區,如果超出了緩沖長度,就無法保留目前的任務了,阻塞隊列通過阻塞可以保留住目前想要繼續入隊的任務。
阻塞隊列可以保證任務隊列中沒有任務時阻塞擷取任務的線程,使得線程進入wait狀态,釋放cpu資源。
阻塞隊列自帶阻塞和喚醒的功能,不需要額外處理,無任務執行時,線程池利用阻塞隊列的take方法挂起,進而維持核心線程的存活、不至于一直占用cpu資源
2、 在建立新線程的時候,是要擷取全局鎖的,這個時候其它的就得阻塞,影響了整體效率。