天天看點

Java 線程池的原理知道嗎?

Java 線程池的原理知道嗎?

線程池的好處

  • 降低資源消耗。重複利用已建立的線程降低線程建立和銷毀造成的消耗。
  • 提高響應速度。當任務到達時,任務可以不需要等到線程建立就能立即執行。
  • 提高線程的可管理性。線程是稀缺資源,如果頻繁建立,會消耗系統資源,降低系統穩定性,使用線程池統一配置設定、調優和監控。

線程池有核心參數:

  1. maximumPoolSize:最大線程數。線程池允許建立的最大線程數。
  2. corePoolSize:核心線程數。當送出一個任務到線程池時,線程池會建立一個線程來執行任務,即使其他空閑的核心線程能夠執行新任務也會建立線程,等到 需要執行的任務數大于線程池基本大小時就不再建立。如果調用了線程池的 prestartAllCoreThreads() 方法,則線程池會提前建立并啟動所有基本線程。
  3. keepAliveTime:線程活動保持時間 ,線程池的工作線程空閑後,保持存活的時間。

線程池執行流程?

  1. 當我們送出任務,線程池會根據 corePoolSize 大小建立若幹任務數量線程執行任務
  2. 當任務的數量超過 corePoolSize 數量,後續的任務将會進入阻塞隊列阻塞排隊。
  3. 當阻塞隊列也滿了之後,那麼将會繼續建立(maximumPoolSize-corePoolSize)個數量的線程來執行任務,如果任務處理完成,maximumPoolSize-corePoolSize 額外建立的線程等待 keepAliveTime 之後被自動銷毀
  4. 如果達到 maximumPoolSize,阻塞隊列還是滿的狀态,那麼将根據不同的拒絕政策對應處理。

繼續閱讀