Java多線程中線程池常見7個(gè)參數(shù)的詳解以及執(zhí)行流程
一 線程池常見參數(shù)
1.1 概念

1.2 7個(gè)參數(shù)說明

7個(gè)參數(shù):
int corePoolSize, 常駐線程數(shù)量(核心)
int maximumPoolSize,最大線程數(shù)量
long keepAliveTime,TimeUnit unit,線程存活時(shí)間
BlockingQueue<Runnable> workQueue,阻塞隊(duì)列(排隊(duì)的線程放入)
ThreadFactory threadFactory,線程工廠,用于創(chuàng)建線程
RejectedExecutionHandler handler拒絕策略(線程滿了)
1.3 coresize和maxsize,poolsize
1.corePoolSize:
線程池的核心線程數(shù)量,線程池的基本大小,即在沒有任務(wù)需要執(zhí)行的時(shí)候線程池的大小,并且只有在工作隊(duì)列滿了的情況下才會創(chuàng)建超出這個(gè)數(shù)量的線程。
2.maximumPoolSize:
線程池中允許的最大線程數(shù)
3.poolSize:
線程池中當(dāng)前線程的數(shù)量
3者之間的關(guān)系:

新提交一個(gè)任務(wù)時(shí)的處理流程很明顯:
1、如果當(dāng)前線程池的線程數(shù)還沒有達(dá)到核心線程數(shù)(poolSize < corePoolSize),無論是否有空閑的線程,都新增一個(gè)線程處理新提交的任務(wù);
2、如果當(dāng)前線程池的線程數(shù)大于或等于核心線程數(shù)(poolSize >= corePoolSize) 且任務(wù)隊(duì)列未滿時(shí),就將新提交的任務(wù)提交到阻塞隊(duì)列排隊(duì),等候處理workQueue.offer(command);
3、如果當(dāng)前線程池的線程數(shù)大于或等于核心線程數(shù)(poolSize >= corePoolSize) 且任務(wù)隊(duì)列滿時(shí);
3.1、當(dāng)前poolSize<maximumPoolSize,那么就新增線程來處理任務(wù);
3.2、當(dāng)前poolSize>=maximumPoolSize,那么意味著線程池的處理能力已經(jīng)達(dá)到了極限,此時(shí)需要拒絕新增加的任務(wù)。至于如何拒絕處理新增的任務(wù),取決于線程池的飽和策略RejectedExecutionHandler。
1.4 newFixedThreadPool
newFixedThreadPool中設(shè)定的線程數(shù)是核心線程數(shù),還是最大線程數(shù),開源代碼如下:

底層繼續(xù)查看 new ThreadPoolExecutor的源代碼

通過查看源碼:答案是:核心線程數(shù)和最大線程數(shù)都設(shè)置成了定義的線程數(shù)量。
到此這篇關(guān)于Java多線程中線程池常見7個(gè)參數(shù)的詳解以及執(zhí)行流程的文章就介紹到這了,更多相關(guān)Java 線程池參數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MyBatis使用resultMap如何解決列名和屬性名不一致
這篇文章主要介紹了MyBatis使用resultMap如何解決列名和屬性名不一致的問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01
Java 使用線程池執(zhí)行多個(gè)任務(wù)的示例
這篇文章主要介紹了Java 使用線程池執(zhí)行多個(gè)任務(wù)的示例,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下2021-03-03
mybatis plus 自動轉(zhuǎn)駝峰配置小結(jié)
SpringBoot提供兩種配置Mybatis的方式,第一種是通過yml或application.properties文件開啟配置,第二種是使用自定義配置類,通過給容器添加一個(gè)ConfigurationCustomizer來實(shí)現(xiàn)更靈活的配置,這兩種方法可以根據(jù)項(xiàng)目需求和個(gè)人喜好選擇使用2024-10-10
Java?Playwright實(shí)現(xiàn)瀏覽器最大化
Playwright?是一個(gè)用于自動化?Web?應(yīng)用測試的現(xiàn)代工具,支持多種語言(包括?Java)及多個(gè)瀏覽器,本文主要介紹了Java如何使用Playwright實(shí)現(xiàn)瀏覽器最大化,需要的可以參考下2024-12-12
java Struts2框架下實(shí)現(xiàn)文件上傳功能
這篇文章主要為大家詳細(xì)介紹了java Struts2框架下實(shí)現(xiàn)文件上傳功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10
idea perttier的使用和縮進(jìn)改為4不成功問題及解決
這篇文章主要介紹了idea perttier的使用和縮進(jìn)改為4不成功問題及解決,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05
Spring @Scheduler使用cron表達(dá)式時(shí)的執(zhí)行問題詳解
Spring給程序猿們帶來了許多便利。下面這篇文章主要給大家介紹了關(guān)于Spring @Scheduler使用cron表達(dá)式時(shí)的執(zhí)行問題的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-09-09

