// 核心線程數(shù)卿拴,線程池默認可以常駐的線程池數(shù)
int corePoolSize
// 最大線程數(shù)衫仑,在線程數(shù) >= corePoolSize 且 workQueue 滿的情況下會才會進行線程的創(chuàng)建
int maximumPoolSize
// 默認是非核心線程的最大 idle 時間,如果設置allowCoreThreadTimeOut 為 true 則核心線程也會受到影響
long keepAliveTime, TimeUnit unit
// 任務等待隊列
BlockingQueue<Runnable> workQueue,
// 線程工廠堕花,可以自定義線程創(chuàng)建的邏輯
ThreadFactory threadFactory
// 拒絕執(zhí)行的策略文狱,在線程數(shù) = maximumPoolSize 且隊列已滿的情況下,新任務的提交將會被拒絕缘挽,拒絕將調(diào)用 handler 的方法
RejectedExecutionHandler handler
任務提交到線程池中的幾種情況
- 當前線程數(shù) < corePoolSize 會進行線程創(chuàng)建瞄崇,并將此任務作為該線程的初始任務
- 當前線程數(shù) = corePoolSize,且任務隊列未滿壕曼,放入隊列中
- 當前線程數(shù) >= corePoolSize 且 < maximumPoolSize 且任務隊列已滿苏研,將創(chuàng)建新的非核心線程
- 當前線程數(shù)已滿且隊列已滿則調(diào)用 RejectedExecutionHandler 進行拒絕處理
常態(tài)下,在線程達到 core size 之后都是通過 queue 進行任務的提交腮郊,queue 的 size 直接反應了當前線程池的任務堆積情況摹蘑,是線程池處理能力的關(guān)鍵指標,同時線程池的 active count 是指當前線程池的活躍線程數(shù)轧飞,也同樣是關(guān)鍵的性能指標衅鹿,如有需要可以考慮進行相應的指標監(jiān)控告警撒踪,通常情況下一般會將 core size 與 max size 設置為同一值,java 的線程與操作系統(tǒng)層面的線程一一映射大渤,開銷較大糠涛,創(chuàng)建銷毀的代價比較高,更傾向于基于業(yè)務體量合理進行 core size 與 queue size 的配置兼犯,而非依賴 max size 進行補救