多線程——線程池的原理分析

前言

  講到多線程,怎麼能不說說線程池呢?接下來說一下線程池的原理分析。


敘述

什麼是線程池

  線程池顧名思義就是事先創建若干個可執行的線程放入一個池(容器)中,需要的時候從池中獲取線程不用自行創建,使用完畢不需要銷燬線程而是放回池中,從而減少創建和銷燬線程對象的開銷。

目的

  先來看看我們爲什麼要使用線程池呢?

  目的:降低資源消耗,提高程序的效率,方便管理。

  • 降低資源消耗:通過重複利用已創建的線程降低線程創建和銷燬造成的消耗。頻繁的創建線程,非常佔用CPU內存
  • 提高效率:當任務到達時,任務可以不需要等待線程創建就能立即執行。
  • 方便管理:統一分配、調優和監控。合理利用線程池。

線程池的分類

  線程池分爲四種

  • newCachedThreadPool:可緩存線程池,無限大小
  • newFixedThreadPool:可固定長度的線程池
  • newScheduledThreadPool:定長、週期性線程池
  • newSingleThreadExecutor:單線程化線程池

線程池的實現原理

  線程池的核心構造函數:ThreadPoolExecutor()

  這個構造函數需要兩個十分關鍵的參數corePoolSize,maximumPoolSize

  • corePoolSize—核心線程數
  • maximumPoolSize—最大線程數

核心線程數和最大線程數的區別是是什麼呢?

  • 核心線程數:實際運行線程數

  • 最大線程數:線程池最多創建多少個線程

  在這裏就需要把我的圖上上來了:

在這裏插入圖片描述
接下來小鹹兒介紹一下這個流程圖:

  • 1、用戶提交線程給線程池,線程池先判斷是否大於核心線程數,若不大於,則執行任務,否則執行第二步
  • 2、判斷緩存隊列是否已滿,沒有滿,則進入緩存隊列中,等待線程執行,否則執行第三步
  • 3、判斷是否大於最大線程數,大於則拒絕執行任務,否則執行第四步
  • 4、重新創建線程,執行任務

總結

  對於多線程,小鹹兒先將自己認知中的內容多做總結,接下還會進行更加深入的學習和實踐。
感謝您的閱讀~~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章