[高頻面試]解釋線程池的各個參數含義


  • 面試中非常高頻的一個面試題:解釋一下線程池中各個參數的含義。 這是一個非常常見但是卻會卡死一大堆人的一道面試題,能夠細致的了解線程池的各個參數的含義對我們學習線程池和使用線程池有着巨大的好處的。
  • 首先我們來看一下線程池主要的參數:
參數名 參數含義
corePoolSize 核心線程數
maxinumPoolSize 最大線程數
keepAliveTime 空閑線程存活時間
unit 存活時間的單位
workQueue 存放線程任務隊列
threadFactory 線程工廠,創建新線程
handler 線程池拒絕處理后的任務
  • 上面展示的參數中第三個和第四個參數算是一個,時間和單位的組合
  • corePoolSize 代表核心線程數,也就是正常情況下創建工作的線程數,這些線程創建后並不會消除,而是一種常駐線程
  • maxinumPoolSize 代表的是最大線程數,它與核心線程數相對應,表示最大允許被創建的線程數,比如當前任務較多,將核心線程數都用完了,還無法滿足需求時,此時就會創建新的線程,但是線程池內線程總數不會超過最大線程數



  • keepAliveTimeunit 表示超出核心線程數之外的線程的空閑存活時間,也就是核心線程不會消除,但是超出核心線程數的部分線程如果空閑一定的時間則會被消除,我們可以通過 setKeepAliveTime 來設置空閑時間

  • workQueue 用來存放待執行的任務,假設我們現在核心線程都已被使用,還有任務進來則全部放入隊列,直到整個隊列被放滿但任務還再持續進入則會開始創建新的線程

  • ThreadFactory 實際上是一個線程工廠,用來生產線程執行任務。我們可以選擇使用默認的創建工廠,產生的線程都在同一個組內,擁有相同的優先級,且都不是守護線程。當然我們也可以選擇自定義線程工廠,一般我們會根據業務來制定不同的線程工廠

  • Handler 任務拒絕策略,有兩種情況,第一種是當我們調用shutdown 等方法關閉線程池后,這時候即使線程池內部還有沒執行完的任務正在執行,但是由於線程池已經關閉,我們再繼續想線程池提交任務就會遭到拒絕。另一種情況就是當達到最大線程數,線程池已經沒有能力繼續處理新提交的任務時,這是也就拒絕

  • 整個的流程如下:


本文由AnonyStar 發布,可轉載但需聲明原文出處。
歡迎關注微信公賬號 :雲棲簡碼 獲取更多優質文章
更多文章關注筆者博客 :雲棲簡碼 i-code.online


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM