線程池核心參數
有7個核心參數
- 核心線程數
- 最大線程數
- 任務隊列
- 線程空閑存活時間
- 線程空閑存活時間的單位
- 線程創建工廠
- 拒絕策略
任務提交流程
往線程池中提交任務流程如下:
- 判斷線程池中線程數是否小于核心線程數,小于新建線程執行任務,否則進入步驟2
- 判斷任務隊列是否滿了,沒滿任務添加到隊列中,否則進入步驟3
-
判斷線程池中線程是是否小于最大線程數,小于新建線程執行任務,否則按照拒絕策略拒絕任務
任務提交流程
線程池狀態
線程池有5種狀態:
- running(運行):新建線程池后的狀態為running
- shutdown(關閉):調用shutdown方法后,不接受新的任務,工作的線程繼續執行,把隊列中的任務執行完成,變成tidying
- stop(停止):調用shutdownnow方法后,不在接受新的任務,中斷正在工作的線程,隊列中的任務不執行,變成tidying
- tidying(整理)
-
terminated(終止):變成tidying狀態之后,內部調用terminated方法
狀態流轉
拒絕策略
有4種:
- 直接丟棄
- 直接拒絕,拋異常
- 交給應用線程執行
- 丟棄隊列中最早的任務,然后重新提交
線程池的數量怎么確定
看場景是cpu密集型還是io密集型
- cpu密集型:cpu核數
- io密集型:2倍cpu核數