Java開發的同窗確定使用過多線程,使用多線程那就確定會用到線程池。並且我的認爲線程池也是各大互聯網公司在面試的時候必問的一個知識點。所以做爲開發人員,必須瞭解線程池的原理以及具體參數的含義。
首先咱們來了解下線程池的基本原理
java
在大體瞭解了線程池的基本工做原理以後,咱們再細看下線程池核心類ThreadPoolExecutor面試
public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler) { //省略具體的代碼內容 }
參數說明多線程
參數 | 說明 |
---|---|
corePoolSize | 核心線程數 |
maximumPoolSize | 最大線程數,通常大於等於核心線程數 |
keepAliveTime | 線程存活時間(針對最大線程數大於核心線程數時,非核心線程) |
unit | 存活時間單位,和線程存活時間配套使用 |
workQueue | 任務隊列 |
threadFactory | 建立線程的工程 |
handler | 拒絕策略 |
拒絕策略有如下幾種spa
拒絕策略 | 說明 |
---|---|
AbortPolicy | 爲java線程池默認的阻塞策略,不執行此任務,並且直接拋出一個運行時異常。 |
DiscardOldestPolicy | 丟棄隊列最前面的任務,而後從新嘗試執行任務(重複此過程) |
DiscardPolicy | 也是丟棄任務,可是不拋出異常 |
CallerRunsPolicy | 由調度線程處理該任務 |