天天看點

springboot使用線程池(ThreadPoolTaskExecutor)

代碼倉庫:gitee

核心線程數量:CorePoolSize

看業務場景設定(我通常設定為CPU核心*1)

最大線程數量:MaxPoolSize

當核心線程數量都在使用狀态時,會調用最大線程數量裡的線程,使用的總線程不會超過最大線程數量,其餘則等待(我通常設定為CPU核心*2)

隊列程度:QueueCapacity

線程隊列的大小

線程空閑時間:KeepAliveSeconds

線程字首名稱:ThreadNamePrefix

停機政策:WaitForTasksToCompleteOnShutdown

該方法用來設定 線程池關閉 的時候 等待 所有任務都完成後,再繼續 銷毀 其他的 Bean,這樣這些 異步任務 的 銷毀 就會先于 資料庫連接配接池對象 的銷毀。

任務的等待時間:AwaitTerminationSeconds

任務的等待時間 如果超過這個時間還沒有銷毀就 強制銷毀,以確定應用最後能夠被關閉,而不是阻塞住

拒接政策:RejectedExecutionHandler

線程不夠用時由調用的線程處理該任務

結果:線程池的核心線程數量輪訓執行

随機睡眠0-10000毫秒

new Random().nextInt(10000)

結果:

當5個核心線程數量不夠用時,使用最大線程數量裡的線程

當最大線程數量不夠用時,使用主線程執行該任務

// 線程不夠用時由調用的線程處理該任務

taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());