springboot使用線程池(ThreadPoolTaskExecutor)示例
代碼倉庫:gitee
線程池創(chuàng)建
@Configuration @EnableAsync public class TaskPoolConfig { @Bean("syncExecutorPool") public Executor taskExecutor() { ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor(); // 核心池大小 taskExecutor.setCorePoolSize(5); // 最大線程數(shù) taskExecutor.setMaxPoolSize(10); // 隊列程度 taskExecutor.setQueueCapacity(100); // 線程空閑時間 taskExecutor.setKeepAliveSeconds(60); // 線程前綴名稱 taskExecutor.setThreadNamePrefix("syncExecutor--"); // 該方法用來設置 線程池關閉 的時候 等待 所有任務都完成后,再繼續(xù) 銷毀 其他的 Bean, // 這樣這些 異步任務 的 銷毀 就會先于 數(shù)據庫連接池對象 的銷毀。 taskExecutor.setWaitForTasksToCompleteOnShutdown(true); // 任務的等待時間 如果超過這個時間還沒有銷毀就 強制銷毀,以確保應用最后能夠被關閉,而不是阻塞住。 taskExecutor.setAwaitTerminationSeconds(60); // 線程不夠用時由調用的線程處理該任務 taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); return taskExecutor; } }
線程池參數(shù)
核心線程數(shù)量:CorePoolSize
看業(yè)務場景設置(我通常設置為CPU核心*1)
最大線程數(shù)量:MaxPoolSize
當核心線程數(shù)量都在使用狀態(tài)時,會調用最大線程數(shù)量里的線程,使用的總線程不會超過最大線程數(shù)量,其余則等待(我通常設置為CPU核心*2)
隊列程度:QueueCapacity
線程隊列的大小
線程空閑時間:KeepAliveSeconds
線程前綴名稱:ThreadNamePrefix
停機策略:WaitForTasksToCompleteOnShutdown
該方法用來設置 線程池關閉 的時候 等待 所有任務都完成后,再繼續(xù) 銷毀 其他的 Bean,這樣這些 異步任務 的 銷毀 就會先于 數(shù)據庫連接池對象 的銷毀。
任務的等待時間:AwaitTerminationSeconds
任務的等待時間 如果超過這個時間還沒有銷毀就 強制銷毀,以確保應用最后能夠被關閉,而不是阻塞住
拒接策略:RejectedExecutionHandler
線程不夠用時由調用的線程處理該任務
線程池測試1(核心線程數(shù)量)
結果:線程池的核心線程數(shù)量輪訓執(zhí)行
線程池測試2(當核心線程數(shù)量和最大線程數(shù)量不夠時)
隨機睡眠0-10000毫秒
new Random().nextInt(10000)
結果:
當5個核心線程數(shù)量不夠用時,使用最大線程數(shù)量里的線程
當最大線程數(shù)量不夠用時,使用主線程執(zhí)行該任務
// 線程不夠用時由調用的線程處理該任務
taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
總結
到此這篇關于springboot使用線程池(ThreadPoolTaskExecutor)示例的文章就介紹到這了,更多相關springboot線程池內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Java中Random簡介_動力節(jié)點Java學院整理
本文詳細給大家介紹了Java中Random簡介相關知識,非常不錯,具有參考借鑒價值,需要的朋友參考下吧2017-06-06springBoot 打war包 程序包com.sun.istack.internal不存在的問題及解決方案
這篇文章主要介紹了springBoot 打war包 程序包com.sun.istack.internal不存在的問題及解決方案,親測試過可以,需要的朋友可以參考下2018-07-07SpringBoot繼承LogStash實現(xiàn)日志收集的方法示例
這篇文章主要介紹了SpringBoot繼承LogStash實現(xiàn)日志收集的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-05-05