Java實(shí)現(xiàn)threadLocal線程池獲取
問(wèn)題:
ThreadLocal默認(rèn)不支持子線程獲取,而InheritableThreadLocal支持子線程獲取threadLocal值,但是如果使用線程池,核心個(gè)數(shù)為1則子線程會(huì)獲取到上一個(gè)threadLocal的值。
解決:
1.引入transmittable-thread-local jar
<dependency> <groupId>com.alibaba</groupId> <artifactId>transmittable-thread-local</artifactId> <version>2.11.4</version> </dependency>
2. threadLocal 初始化
private static final TransmittableThreadLocal<User> CURRENT_USER_HOLDER = new TransmittableThreadLocal();
3. Executor bean,使用TtlExecutor
@Bean(value = "defaultThreadPool")
public Executor buildQueueThreadPool() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
int cpuNum = Runtime.getRuntime().availableProcessors();
// 設(shè)置核心線程數(shù)
executor.setCorePoolSize(Math.min(cpuNum * 2, 16));
// 設(shè)置最大線程數(shù)
executor.setMaxPoolSize(cpuNum * 2);
//隊(duì)列中最大的數(shù)目
executor.setQueueCapacity(300);
//線程名稱前綴
executor.setThreadNamePrefix("defaultThreadPool_");
//rejection-policy:當(dāng)pool已經(jīng)達(dá)到max size的時(shí)候,如何處理新任務(wù)
//CALLER_RUNS:不在新線程中執(zhí)行任務(wù),而是由調(diào)用者所在的線程來(lái)執(zhí)行
//對(duì)拒絕task的處理策略
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
//線程空閑后的最大存活時(shí)間
executor.setKeepAliveSeconds(60);
//加載
executor.initialize();
return TtlExecutors.getTtlExecutor(executor);
}到此這篇關(guān)于Java實(shí)現(xiàn)threadLocal線程池獲取的文章就介紹到這了,更多相關(guān)Java threadLocal線程池內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot隱式參數(shù)注入的碼優(yōu)雅升級(jí)指南
這篇文章主要為大家詳細(xì)介紹了SpringBoot中隱式參數(shù)注入的相關(guān)方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2026-03-03
Windows環(huán)境下Java版本管理終極攻略(徹底告別JDK版本地獄)
JDK是Oracle公司提供的用于Java程序開(kāi)發(fā)的完整軟件包,它是Java開(kāi)發(fā)者不可或缺的核心工具,包含了編寫(xiě)、編譯、調(diào)試和運(yùn)行Java程序所需的一切組件,這篇文章主要介紹了Windows環(huán)境下Java版本管理終極攻略的相關(guān)資料,需要的朋友可以參考下2026-06-06
Java基于控制臺(tái)界面實(shí)現(xiàn)ATM系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了Java基于控制臺(tái)界面實(shí)現(xiàn)ATM系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05
java?面向?qū)ο蟠a塊及不同位置對(duì)屬性賦值的執(zhí)行順序
這篇文章主要介紹了java面向?qū)ο蟠a塊及不同位置對(duì)屬性賦值的執(zhí)行順序,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-09-09
springboot項(xiàng)目之相互依賴報(bào)錯(cuò)問(wèn)題(基于idea)
這篇文章主要介紹了springboot項(xiàng)目之相互依賴報(bào)錯(cuò)問(wèn)題(基于idea),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02
Java的Jackson庫(kù)的使用及其樹(shù)模型的入門(mén)學(xué)習(xí)教程
這篇文章主要介紹了Java的Jackson庫(kù)的使用及其樹(shù)模型入門(mén)學(xué)習(xí)教程,Jackson庫(kù)通常被用來(lái)作Java對(duì)象和JSON的互相轉(zhuǎn)換,需要的朋友可以參考下2016-01-01
SpringMVC配置多個(gè)properties文件之通配符解析
這篇文章主要介紹了SpringMVC配置多個(gè)properties文件之通配符解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09

