自定义线程池-参数设计分析
自定義線程池-參數(shù)設(shè)計(jì)分析
通過觀察Java中的內(nèi)置線程池參數(shù)講解和線程池工作流程總結(jié),我們不難發(fā)現(xiàn),要設(shè)計(jì)一個(gè)好的線程池,就必須合理的設(shè)置線程池的4個(gè)參數(shù);那到底該如何合理的設(shè)計(jì)4個(gè)參數(shù)的值呢?我們一起往下看.
4個(gè)參數(shù)的設(shè)計(jì):
1:核心線程數(shù)(corePoolSize)
核心線程數(shù)的設(shè)計(jì)需要依據(jù)任務(wù)的處理時(shí)間和每秒產(chǎn)生的任務(wù)數(shù)量來確定,例如:執(zhí)行一個(gè)任務(wù)需要0.1秒,系統(tǒng)百分之80的時(shí)間每秒都會(huì)產(chǎn)生100個(gè)任務(wù),那么要想在1秒內(nèi)處理完這100個(gè)任務(wù),就需要10個(gè)線程,此時(shí)我們就可以設(shè)計(jì)核心線程數(shù)為10;當(dāng)然實(shí)際情況不可能這么平均,所以我們一般按照8020原則設(shè)計(jì)即可,既按照百分之80的情況設(shè)計(jì)核心線程數(shù),剩下的百分之20可以利用最大線程數(shù)處理;
2:任務(wù)隊(duì)列長度(workQueue)
任務(wù)隊(duì)列長度一般設(shè)計(jì)為:核心線程數(shù)/單個(gè)任務(wù)執(zhí)行時(shí)間*2即可;例如上面的場景中,核心線程數(shù)設(shè)計(jì)為10,單個(gè)任務(wù)執(zhí)行時(shí)間為0.1秒,則隊(duì)列長度可以設(shè)計(jì)為200;
3:最大線程數(shù)(maximumPoolSize)
最大線程數(shù)的設(shè)計(jì)除了需要參照核心線程數(shù)的條件外,還需要參照系統(tǒng)每秒產(chǎn)生的最大任務(wù)數(shù)決定:例如:上述環(huán)境中,如果系統(tǒng)每秒最大產(chǎn)生的任務(wù)是1000個(gè),那么,最大線程數(shù)=(最大任務(wù)數(shù)-任務(wù)隊(duì)列長度)*單個(gè)任務(wù)執(zhí)行時(shí)間;既: 最大線程數(shù)=(1000-200)*0.1=80個(gè);
4:最大空閑時(shí)間(keepAliveTime)
這個(gè)參數(shù)的設(shè)計(jì)完全參考系統(tǒng)運(yùn)行環(huán)境和硬件壓力設(shè)定,沒有固定的參考值,用戶可以根據(jù)經(jīng)驗(yàn)和系統(tǒng)產(chǎn)生任務(wù)的時(shí)間間隔合理設(shè)置一個(gè)值即可;
小提示:
上面4個(gè)參數(shù)的設(shè)置只是一般的設(shè)計(jì)原則,并不是固定的,用戶也可以根據(jù)實(shí)際情況靈活調(diào)整!
?
總結(jié)
以上是生活随笔為你收集整理的自定义线程池-参数设计分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 自定义线程池-线程池工作流程介绍
- 下一篇: 自定义线程池-线程类和任务类代码实现