前言
講到多線程,怎麼能不說說線程池呢?接下來說一下線程池的原理分析。
敘述
什麼是線程池
線程池顧名思義就是事先創建若干個可執行的線程放入一個池(容器)中,需要的時候從池中獲取線程不用自行創建,使用完畢不需要銷燬線程而是放回池中,從而減少創建和銷燬線程對象的開銷。
目的
先來看看我們爲什麼要使用線程池呢?
目的:降低資源消耗,提高程序的效率,方便管理。
- 降低資源消耗:通過重複利用已創建的線程降低線程創建和銷燬造成的消耗。頻繁的創建線程,非常佔用CPU內存
- 提高效率:當任務到達時,任務可以不需要等待線程創建就能立即執行。
- 方便管理:統一分配、調優和監控。合理利用線程池。
線程池的分類
線程池分爲四種
- newCachedThreadPool:可緩存線程池,無限大小
- newFixedThreadPool:可固定長度的線程池
- newScheduledThreadPool:定長、週期性線程池
- newSingleThreadExecutor:單線程化線程池
線程池的實現原理
線程池的核心構造函數:ThreadPoolExecutor()
這個構造函數需要兩個十分關鍵的參數corePoolSize,maximumPoolSize
- corePoolSize—核心線程數
- maximumPoolSize—最大線程數
核心線程數和最大線程數的區別是是什麼呢?
-
核心線程數:實際運行線程數
-
最大線程數:線程池最多創建多少個線程
在這裏就需要把我的圖上上來了:
接下來小鹹兒介紹一下這個流程圖:
- 1、用戶提交線程給線程池,線程池先判斷是否大於核心線程數,若不大於,則執行任務,否則執行第二步
- 2、判斷緩存隊列是否已滿,沒有滿,則進入緩存隊列中,等待線程執行,否則執行第三步
- 3、判斷是否大於最大線程數,大於則拒絕執行任務,否則執行第四步
- 4、重新創建線程,執行任務
總結
對於多線程,小鹹兒先將自己認知中的內容多做總結,接下還會進行更加深入的學習和實踐。
感謝您的閱讀~~