線程池的核心參數
ThreadPoolExecutor(int corePoolSize,//核心線程數目int MaximumPoolSize,//最大線程數=核心線程+臨時線程long keepAliveTime,//臨時線程的存活時間,在存活時間內如果沒有新任務,線程資源會被釋放TimeUnit unit,//存活時間的時間單位,一個枚舉類型BlockingQueue<Runnable> workQueue,//阻塞隊列,如果沒有空閑的核心線程時(不會直接叫臨時線程來處理),就會將新來的任務放入阻塞隊列中等待ThreadFactory threadFactory,//定制線程對象的創建,沒什么用RejectedExecutionHandler handler//拒絕策略,定義線程都在繁忙且阻塞隊列滿時對新來任務的處理方式
)
線程池的執行原理
提交任務,
先判斷核心線程是否全部繁忙,否->添加到工作線程執行
再判斷阻塞隊列是否已滿,否->添加任務到阻塞隊列等待
再判斷總線程數是否小于最大線程數,否->創建臨時線程執行
(如果核心線程和臨時線程空閑時,都會執行阻塞隊列里的任務)
按照拒絕策略進行拒絕
拒絕策略
AbortPolicy:直接拋出異常,默認策略
CallerRunsPolicy:用調用者所在的線程(主線程)來執行任務
DiscardOldestPolicy:丟棄阻塞隊列最靠前(等待時間最久)的任務來執行當前任務
DiscardPolicy:直接丟棄任務