Java實(shí)現(xiàn)threadLocal線程池獲取
問題:
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)用者所在的線程來執(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)文章
SpringCloud使用FFmpeg對(duì)視頻壓縮處理的代碼示例
在現(xiàn)代的視頻處理系統(tǒng)中,壓縮視頻以減小存儲(chǔ)空間、加快傳輸速度是一項(xiàng)非常重要的任務(wù),FFmpeg作為一個(gè)強(qiáng)大的開源工具,廣泛應(yīng)用于音視頻的處理,包括視頻的壓縮和格式轉(zhuǎn)換等,本文將通過Java代碼示例,向您展示如何使用FFmpeg進(jìn)行視頻壓縮,并介紹相關(guān)參數(shù)的設(shè)置2024-11-11Spring MVC 學(xué)習(xí) 之 - URL參數(shù)傳遞詳解
本篇文章主要介紹了SpringMVC-URL參數(shù)傳遞,在學(xué)習(xí) Spring Mvc 過程中,有必要來先了解幾個(gè)關(guān)鍵參數(shù),有興趣的可以了解一下。2017-01-01SpringBoot靜態(tài)資源與首頁(yè)配置實(shí)現(xiàn)原理深入分析
最近在做SpringBoot項(xiàng)目的時(shí)候遇到了“白頁(yè)”問題,通過查資料對(duì)SpringBoot訪問靜態(tài)資源做了總結(jié),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2022-10-10SpringMVC 重新定向redirect請(qǐng)求中攜帶數(shù)據(jù)方式
這篇文章主要介紹了SpringMVC 重新定向redirect請(qǐng)求中攜帶數(shù)據(jù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12Java負(fù)載均衡策略的實(shí)現(xiàn)詳解
這篇文章主要介紹了Java負(fù)載均衡策略的實(shí)現(xiàn),負(fù)載均衡在Java領(lǐng)域中有著廣泛深入的應(yīng)用,不管是大名鼎鼎的nginx,還是微服務(wù)治理組件如dubbo,feign等,負(fù)載均衡的算法在其中都有著實(shí)際的使用,需要的朋友可以參考下2022-07-07基于java實(shí)現(xiàn)簡(jiǎn)單發(fā)紅包功能
這篇文章主要為大家詳細(xì)介紹了基于java實(shí)現(xiàn)簡(jiǎn)單發(fā)紅包功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-11-11基于Spring框架由ConditionalOnMissingBean注解引發(fā)的問題
這篇文章主要介紹了基于Spring框架由ConditionalOnMissingBean注解引發(fā)的問題,具有很好2023-11-11Java Kafka分區(qū)發(fā)送及消費(fèi)實(shí)戰(zhàn)
本文主要介紹了Kafka分區(qū)發(fā)送及消費(fèi)實(shí)戰(zhàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07