Java中線程池原理以及參數說明

Java開發的同窗確定使用過多線程,使用多線程那就確定會用到線程池。並且我的認爲線程池也是各大互聯網公司在面試的時候必問的一個知識點。所以做爲開發人員,必須瞭解線程池的原理以及具體參數的含義。

首先咱們來了解下線程池的基本原理
圖片描述java

  1. 第一步即是咱們將咱們的任務提交給線程池
  2. 若是線程池中線程數小於核心線程數,則建立一個新的線程來執行該任務。不然進入步驟3
  3. 提交任務時,線程池中的空閒的線程數爲0而且線程數等於核心線程數,則觀察線程池中的任務隊列是否已滿,若是未滿則將任務添加到任務隊列,不然進入步驟4
  4. 若是最大線程數大於核心線程數,而且總線程數小於最大線程數,則建立一個新的線程來執行該任務。不然進入步驟5
  5. 當任務隊列已滿時,就執行拒絕策略(後續詳解拒絕策略)

在大體瞭解了線程池的基本工做原理以後,咱們再細看下線程池核心類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 由調度線程處理該任務
相關文章
相關標籤/搜索