線程池的七大核心參數(shù)以及常用的四種線程池詳解
引言
我們通過線程池可以實現(xiàn)已創(chuàng)建線程的復(fù)用,減少資源的消耗;控制并發(fā)的數(shù)量;以及對線程進行統(tǒng)一的管理。
下面我會對線程池的核心參數(shù)以及常用的線程池種類進行詳細的講解。
7大核心參數(shù)
int corePoolSize 核心線程最大數(shù)量
核心線程:
- 線程池中有兩類線程:核心線程和非核心線程。
- 核心線程默認情況下會一直存在于線程池中,即使這個核心線程什么都不干,而非核心線程如果長時間的閑置,就會被銷毀。
int maximumPoolSize 線程總數(shù)量最大值
改值等于核心線程數(shù)+非核心線程數(shù)
long keepAliveTime 非核心線程的閑置超時時間
非核心線程閑置時間超過此值就會被銷毀
TimeUnit unit (keepAliveTime的單位)
TimeUnit是一個枚舉類型:
NANOSECONDS
: 1微毫秒,MICROSECONDS
:1微秒MILLSECONDS
:1毫秒SECONDS
:1秒MINUTES
:1分HOURS
:1小時DAYS
:1天
BlockingQueue workQueue 阻塞隊列
常見的幾個阻塞隊列:
LinkedBlockingQueue
鏈式阻塞隊列,默認大?。篒nterger.MAX_VALUE,可以指定大小。
ArrayBlockingQueue
數(shù)組阻塞隊列,需要指定大小
SynchronousQueue
同步隊列,內(nèi)部容量為0,每個put操作都必須等待一個take操作。反之亦然
DelayQueue
延遲隊列,隊列中的元素之后當其指定的延遲時間到了,才能從隊列中獲取到改元素。
ThreadFactory threadFactory 線程工廠
創(chuàng)建線程的工廠,用于批量創(chuàng)建線程,如果不指定,會新建一個默認的線程工廠。
RejectedExecutionHandler handler 拒絕策略
拒絕處理策略,當無法創(chuàng)建新線程處理任務(wù)并且阻塞隊列已滿時就會采用拒絕處理策略。
jdk默認四種策略:
ThreadPoolExecutor.AbortPolicy
:默認拒絕處理策略,丟棄任務(wù)并拋出異常ThreadPollExecutor.DiscardPolicy
:丟棄新來的任務(wù),但不拋出異常ThreadPollExecutor.DiscardOldestPolicy
:丟棄阻塞隊列頭部(最舊)的任務(wù),然后重新嘗試執(zhí)行程序,(如果再次失敗,重復(fù)此過程)ThreadPollExecutor.CallerRunPolicy
:由調(diào)用的線程去處理改任務(wù)。只適用于并發(fā)小的情況。
常用的四種線程池
newCachedThreadPool (可緩存線程池)
核心線程數(shù)為0,總線程數(shù)是最大整數(shù),當需要執(zhí)行很多短時任務(wù)時它的服用率比較高,會顯著提升性能。并且線程空閑60s就會被回收,所以如果沒有任務(wù),它并不會占用很多資源。
newFixedThreadPool(指定工作線程數(shù)量的線程池)
核心線程數(shù)等于最大線程數(shù)。也就是該線程池中沒有非核心線程。
newSingleThreadPool(單線程化的線程池)
只有一個核心線程,所有任務(wù)按照先來先執(zhí)行的順序執(zhí)行。
newScheduledThreadPool(定長線程池)
這個線程池指定了核心線程的數(shù)量,線程總數(shù)可以創(chuàng)建整數(shù)的最大數(shù)個。
該線程池支持定時以及周期性任務(wù)執(zhí)行。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java之idea @NotNull @Nullable 注解使用
這篇文章主要介紹了Java之idea @NotNull @Nullable 注解使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-01-01Java實現(xiàn)順序表和鏈表結(jié)構(gòu)
大家好,本篇文章主要講的是Java實現(xiàn)順序表和鏈表結(jié)構(gòu),感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下2022-02-02java接口類中的@selectProvider接口的使用及說明
這篇文章主要介紹了java接口類中的@selectProvider接口的使用及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-08-08Java實現(xiàn)文件復(fù)制及文件夾復(fù)制幾種常用的方式
這篇文章主要給大家介紹了關(guān)于Java實現(xiàn)文件復(fù)制及文件夾復(fù)制幾種常用的方式,java復(fù)制文件的方式其實有不少種,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2023-09-09Java導(dǎo)入、導(dǎo)出excel用法步驟保姆級教程(附封裝好的工具類)
這篇文章主要介紹了Java導(dǎo)入、導(dǎo)出excel的相關(guān)資料,講解了使用Java和ApachePOI庫將數(shù)據(jù)導(dǎo)出為Excel文件,包括創(chuàng)建工作簿、工作表、行和單元格,設(shè)置樣式和字體,合并單元格,添加公式和下拉選擇等功能,需要的朋友可以參考下2025-03-03java虛擬機鉤子關(guān)閉函數(shù)addShutdownHook的操作
這篇文章主要介紹了java虛擬機鉤子關(guān)閉函數(shù)addShutdownHook的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-02-02