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

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

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

  1. 第一步便是我們將我們的任務提交給線程池
  2. 如果線程池中有足夠的線程或者線程數小於核心線程數,則直接執行任務或者創建一個新的線程來執行該任務。否則進入步驟3
  3. 提交任務時,線程池中的空閒的線程數爲0並且線程數等於核心線程數,則觀察線程池中的任務隊列是否已滿,如果未滿則將任務添加到任務隊列,否則進入步驟4
  4. 當任務隊列已滿時,就執行拒絕策略(後續詳解拒絕策略)

在大致瞭解了線程池的基本工作原理之後,我們再細看下線程池核心類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 拒絕策略

拒絕策略有以下幾種

拒絕策略 說明
AbortPolicy 爲java線程池默認的阻塞策略,不執行此任務,而且直接拋出一個運行時異常。
DiscardOldestPolicy 丟棄隊列最前面的任務,然後重新嘗試執行任務(重複此過程)
DiscardPolicy 也是丟棄任務,但是不拋出異常
CallerRunsPolicy 由調度線程處理該任務
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章