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