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ù)據(jù)庫連接池對象 的銷毀。
taskExecutor.setWaitForTasksToCompleteOnShutdown(true);
// 任務的等待時間 如果超過這個時間還沒有銷毀就 強制銷毀,以確保應用最后能夠被關閉,而不是阻塞住。
taskExecutor.setAwaitTerminationSeconds(60);
// 線程不夠用時由調(diào)用的線程處理該任務
taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
return taskExecutor;
}
}
線程池參數(shù)
核心線程數(shù)量:CorePoolSize
看業(yè)務場景設置(我通常設置為CPU核心*1)
最大線程數(shù)量:MaxPoolSize
當核心線程數(shù)量都在使用狀態(tài)時,會調(diào)用最大線程數(shù)量里的線程,使用的總線程不會超過最大線程數(shù)量,其余則等待(我通常設置為CPU核心*2)
隊列程度:QueueCapacity
線程隊列的大小
線程空閑時間:KeepAliveSeconds
線程前綴名稱:ThreadNamePrefix
停機策略:WaitForTasksToCompleteOnShutdown
該方法用來設置 線程池關閉 的時候 等待 所有任務都完成后,再繼續(xù) 銷毀 其他的 Bean,這樣這些 異步任務 的 銷毀 就會先于 數(shù)據(jù)庫連接池對象 的銷毀。
任務的等待時間:AwaitTerminationSeconds
任務的等待時間 如果超過這個時間還沒有銷毀就 強制銷毀,以確保應用最后能夠被關閉,而不是阻塞住
拒接策略:RejectedExecutionHandler
線程不夠用時由調(diào)用的線程處理該任務
線程池測試1(核心線程數(shù)量)

結(jié)果:線程池的核心線程數(shù)量輪訓執(zhí)行
線程池測試2(當核心線程數(shù)量和最大線程數(shù)量不夠時)
隨機睡眠0-10000毫秒
new Random().nextInt(10000)

結(jié)果:
當5個核心線程數(shù)量不夠用時,使用最大線程數(shù)量里的線程
當最大線程數(shù)量不夠用時,使用主線程執(zhí)行該任務
// 線程不夠用時由調(diào)用的線程處理該任務
taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
總結(jié)
到此這篇關于springboot使用線程池(ThreadPoolTaskExecutor)示例的文章就介紹到這了,更多相關springboot線程池內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
基于SpringBoot與Mybatis實現(xiàn)SpringMVC Web項目
這篇文章主要介紹了基于SpringBoot與Mybatis實現(xiàn)SpringMVC Web項目的相關資料,需要的朋友可以參考下2017-04-04
springcloud-gateway整合jwt+jcasbin實現(xiàn)權限控制的詳細過程
這篇文章主要介紹了springcloud-gateway整合jwt+jcasbin實現(xiàn)權限控制,基于springboot+springcloud+nacos的簡單分布式項目,項目交互采用openFeign框架,單獨提取出來成為一個獨立的model,需要的朋友可以參考下2023-02-02
Spring項目如何實現(xiàn)帶請求鏈路id的日志記錄
我們在做項目的時候通常需要通過請求日志來排查定位線上問題,如果日志比較多而我們又需要查找整個請求的全部日志的時候會比較困難,下面我們就來看看如何用java aop實現(xiàn)請求id的日志記錄吧2024-12-12
Springboot2 集成 druid 加密數(shù)據(jù)庫密碼的配置方法
這篇文章給大家介紹Springboot2 集成 druid 加密數(shù)據(jù)庫密碼的配置方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧2021-07-07
Java線程之間數(shù)據(jù)傳遞的實現(xiàn)示例(4種)
我們經(jīng)常會遇到父子線程數(shù)據(jù)傳遞(非調(diào)用參數(shù))的場景,本文主要介紹了Java線程之間數(shù)據(jù)傳遞的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-08-08
SpringBoot3.x接入Security6.x實現(xiàn)JWT認證的完整步驟
這篇文章主要介紹了Spring?Boot?3.x中Spring?Security?6.x的安全配置變化,特別是JWT過濾器的工作原理和配置方法,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2025-02-02
基于Security實現(xiàn)OIDC單點登錄的詳細流程
本文主要是給大家介紹 OIDC 的核心概念以及如何通過對 Spring Security 的授權碼模式進行擴展來實現(xiàn) OIDC 的單點登錄。對Security實現(xiàn)OIDC單點登錄的詳細過程感興趣的朋友,一起看看吧2021-09-09

