自定义线程池-线程池工作流程介绍
ThreadPoolExecutor參數(shù)詳解
我們可以通過下面的場景理解ThreadPoolExecutor中的各個參數(shù);
a客戶(任務(wù))去銀行(線程池)辦理業(yè)務(wù),但銀行剛開始營業(yè),窗口服務(wù)員還未就位(相當(dāng)于線程池中初始線程數(shù)量為0),
于是經(jīng)理(線程池管理者)就安排1號工作人員(創(chuàng)建1號線程執(zhí)行任務(wù))接待a客戶(創(chuàng)建線程);
在a客戶業(yè)務(wù)還沒辦完時,b客戶(任務(wù))又來了,于是經(jīng)理(線程池管理者)就安排2號工作人員(創(chuàng)建2號線程執(zhí)行任務(wù))接待b客戶(又創(chuàng)建了一個新的線程);假設(shè)該銀行總共就2個窗口(核心線程數(shù)量是2);
緊接著在a,b客戶都沒有結(jié)束的情況下c客戶來了,于是經(jīng)理(線程池管理者)就安排c客戶先坐到銀行大廳的座位上(空位相當(dāng)于是任務(wù)隊列)等候,
并告知他: 如果1、2號工作人員空出,c就可以前去辦理業(yè)務(wù);
此時d客戶又到了銀行,(工作人員都在忙,大廳座位也滿了)于是經(jīng)理趕緊安排臨時工(新創(chuàng)建的線程)在大堂站著,手持pad設(shè)備給d客戶辦理業(yè)務(wù);
假如前面的業(yè)務(wù)都沒有結(jié)束的時候e客戶又來了,此時正式工作人員都上了,臨時工也上了,座位也滿了(臨時工加正式員工的總數(shù)量就是最大線程數(shù)),
于是經(jīng)理只能按《超出銀行最大接待能力處理辦法》(飽和處理機制)拒接接待e客戶;
最后,進(jìn)來辦業(yè)務(wù)的人少了,大廳的臨時工空閑時間也超過了1個小時(最大空閑時間),經(jīng)理就會讓這部分空閑的員工人下班.(銷毀線程)
但是為了保證銀行銀行正常工作(有一個allowCoreThreadTimeout變量控制是否允許銷毀核心線程,默認(rèn)false),即使正式工閑著,也不得提前下班,所以1、2號工作人員繼續(xù)待著(池內(nèi)保持核心線程數(shù)量);
?
線程池工作流程總結(jié)示意圖
?
總結(jié)
以上是生活随笔為你收集整理的自定义线程池-线程池工作流程介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 自定义线程池-java内置线程池构造方法
- 下一篇: 自定义线程池-参数设计分析