ThreadLocal是什么
ThreadLocal是一個(gè)本地線程副本變量工具類(lèi)。主要用于將私有線程和該線程存放的副本對(duì)象做一個(gè)映射,各個(gè)線程之間的變量互不干擾,在高并發(fā)場(chǎng)景下,可以實(shí)現(xiàn)無(wú)狀態(tài)的調(diào)用,特別適用于各個(gè)線程依賴(lài)不通的變量值完成操作的場(chǎng)景。
下圖為T(mén)hreadLocal的內(nèi)部結(jié)構(gòu)圖
從上面的結(jié)構(gòu)圖,我們已經(jīng)窺見(jiàn)ThreadLocal的核心機(jī)制:
-
每個(gè)Thread線程內(nèi)部都有一個(gè)Map。
-
Map里面存儲(chǔ)線程本地對(duì)象(key)和線程的變量副本(value)
-
但是,Thread內(nèi)部的Map是由ThreadLocal維護(hù)的,由ThreadLocal負(fù)責(zé)向map獲取和設(shè)置線程的變量值。
所以對(duì)于不同的線程,每次獲取副本值時(shí),別的線程并不能獲取到當(dāng)前線程的副本值,形成了副本的隔離,互不干擾。
基于 Spring Boot + MyBatis Plus + Vue & Element 實(shí)現(xiàn)的后臺(tái)管理系統(tǒng) + 用戶(hù)小程序,支持 RBAC 動(dòng)態(tài)權(quán)限、多租戶(hù)、數(shù)據(jù)權(quán)限、工作流、三方登錄、支付、短信、商城等功能
-
項(xiàng)目地址:https://github.com/YunaiV/ruoyi-vue-pro
-
視頻教程:https://doc.iocoder.cn/video/
ThreadLocalMap
ThreadLocalMap是ThreadLocal的內(nèi)部類(lèi),沒(méi)有實(shí)現(xiàn)Map接口,用獨(dú)立的方式實(shí)現(xiàn)了Map的功能,其內(nèi)部的Entry也獨(dú)立實(shí)現(xiàn)。
和HashMap的最大的不同在于,ThreadLocalMap結(jié)構(gòu)非常簡(jiǎn)單,沒(méi)有next引用,也就是說(shuō)ThreadLocalMap中解決Hash沖突的方式并非鏈表的方式,而是采用線性探測(cè)的方式。(ThreadLocalMap如何解決沖突? )
在ThreadLocalMap中,也是用Entry來(lái)保存K-V結(jié)構(gòu)數(shù)據(jù)的。但是Entry中key只能是ThreadLocal對(duì)象,這點(diǎn)被Entry的構(gòu)造方法已經(jīng)限定死了。
staticclassEntryextendsWeakReference<ThreadLocal>{
/**ThevalueassociatedwiththisThreadLocal.*/
Objectvalue;
Entry(ThreadLocalk,Objectv){
super(k);
value=v;
}
}
注意了??!
Entry繼承自WeakReference(弱引用,生命周期只能存活到下次GC前),但只有Key是弱引用類(lèi)型的,Value并非弱引用。(問(wèn)題馬上就來(lái)了)
由于ThreadLocalMap的key是弱引用,而Value是強(qiáng)引用。這就導(dǎo)致了一個(gè)問(wèn)題,ThreadLocal在沒(méi)有外部對(duì)象強(qiáng)引用時(shí),發(fā)生GC時(shí)弱引用Key會(huì)被回收,而Value不會(huì)回收。
當(dāng)線程沒(méi)有結(jié)束,但是ThreadLocal已經(jīng)被回收,則可能導(dǎo)致線程中存在ThreadLocalMap
的鍵值對(duì),造成內(nèi)存泄露。(ThreadLocal被回收,ThreadLocal關(guān)聯(lián)的線程共享變量還存在)。
基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 實(shí)現(xiàn)的后臺(tái)管理系統(tǒng) + 用戶(hù)小程序,支持 RBAC 動(dòng)態(tài)權(quán)限、多租戶(hù)、數(shù)據(jù)權(quán)限、工作流、三方登錄、支付、短信、商城等功能
-
項(xiàng)目地址:https://github.com/YunaiV/yudao-cloud
-
視頻教程:https://doc.iocoder.cn/video/
如何避免泄漏
為了防止此類(lèi)情況的出現(xiàn),我們有兩種手段。
1、使用完線程共享變量后,顯示調(diào)用ThreadLocalMap.remove
方法清除線程共享變量;
既然Key是弱引用,那么我們要做的事,就是在調(diào)用ThreadLocal的get()
、set()
方法時(shí)完成后再調(diào)用remove方法,將Entry節(jié)點(diǎn)和Map的引用關(guān)系移除,這樣整個(gè)Entry對(duì)象在GC Roots分析后就變成不可達(dá)了,下次GC的時(shí)候就可以被回收。
2、JDK建議ThreadLocal定義為private static
,這樣ThreadLocal的弱引用問(wèn)題則不存在了。
審核編輯 :李倩
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。
舉報(bào)投訴
原文標(biāo)題:ThreadLocal 搭配線程池使用造成內(nèi)存泄漏的原因和解決方案
文章出處:【微信號(hào):芋道源碼,微信公眾號(hào):芋道源碼】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
相關(guān)推薦
光耦的使用環(huán)境對(duì)性能的影響 1. 溫度對(duì)光耦性能的影響 溫度是影響光耦性能的重要因素之一。光耦中的LED和光敏元件對(duì)溫度變化非常敏感。 LED的發(fā)光效率 :隨著溫度的升高,LED的發(fā)光效率會(huì)降低,導(dǎo)致光耦的傳輸效率下降。 光敏元件的靈敏度 :溫度的變化也會(huì)影響光敏元件的靈敏度,過(guò)高或過(guò)低的溫度都可能導(dǎo)致光敏元件性能下降。 熱穩(wěn)定性 :光耦的熱穩(wěn)定性是指在溫度變化下,其性能保持不變的能力。不同型號(hào)的光耦對(duì)溫度的適應(yīng)性不同,因此
發(fā)表于 01-14 16:51
?0次閱讀
隨著全球環(huán)保意識(shí)的提升和技術(shù)的不斷進(jìn)步,新能源汽車(chē)產(chǎn)業(yè)迎來(lái)了前所未有的發(fā)展機(jī)遇。OBC(車(chē)載充電機(jī))和DCDC(直流-直流變換器)作為電動(dòng)汽車(chē)的關(guān)鍵部件,其性能和質(zhì)量直接關(guān)系到整車(chē)的運(yùn)行效率和安全性。因此,深入了解OBC與DCDC的技術(shù)特點(diǎn)及其測(cè)試系統(tǒng)顯得尤為重要。 吉事勵(lì)車(chē)載充電機(jī)OBC/DC-DC轉(zhuǎn)換器測(cè)試系統(tǒng) OBC作為車(chē)載充電機(jī),主要功能是將電網(wǎng)電壓通過(guò)地面交流充電樁或交流充電口,轉(zhuǎn)換為適合電動(dòng)汽車(chē)電池充電的直流電壓。根據(jù)國(guó)家標(biāo)
發(fā)表于 01-14 16:48
?12次閱讀
在上篇 LTspice 系列文章中,我們分享了如何利用ISO模型進(jìn)行電源線瞬態(tài)電傳導(dǎo)干擾測(cè)試,本文將介紹使用 .func 命令中的指定常數(shù)以有效運(yùn)行仿真并進(jìn)行參數(shù)分析的方法。更多參數(shù)分析的內(nèi)容,可查閱《活學(xué)活用LTspice進(jìn)行電路設(shè)計(jì) — 用 .step 命令更改參數(shù)》
發(fā)表于 01-14 16:48
?5次閱讀
電子發(fā)燒友網(wǎng)站提供《EE-218:為ADSP-TS201 TigerSHARC處理器編寫(xiě)高效浮點(diǎn)FFT.pdf》資料免費(fèi)下載
發(fā)表于 01-14 16:46
?0次下載
在工程設(shè)計(jì)領(lǐng)域,集成式建模和仿真已成為推動(dòng)產(chǎn)品創(chuàng)新、提高設(shè)計(jì)效率的關(guān)鍵技術(shù)。SOLIDWORKS,作為達(dá)索系統(tǒng)的旗艦產(chǎn)品,一直致力于通過(guò)持續(xù)創(chuàng)新和優(yōu)化,為用戶(hù)提供功能強(qiáng)大、性能優(yōu)越的CAD軟件解決方案。隨著SOLIDWORKS 2025版本的發(fā)布,其集成式建模和仿真功能再次實(shí)現(xiàn)了質(zhì)的飛躍,為設(shè)計(jì)師和工程師提供了更加便捷、有效和智能的設(shè)計(jì)平臺(tái)。
發(fā)表于 01-14 16:46
?15次閱讀
近日,工業(yè)和信息化部辦公廳公布了2024年度質(zhì)量提升與品牌建設(shè)典型案例名單,錦浪科技股份有限公司的“IGBT全工況檢測(cè)系統(tǒng)提升核心器件可靠性”成功入選質(zhì)量管理能力方向典型案例。
發(fā)表于 01-14 16:45
?9次閱讀
在現(xiàn)代通信技術(shù)中,數(shù)據(jù)傳輸?shù)目煽啃院桶踩灾陵P(guān)重要。光耦作為一種電光隔離元件,因其獨(dú)特的隔離特性,在通信設(shè)備中發(fā)揮著不可替代的作用。 光耦的基本原理 光耦主要由一個(gè)發(fā)光二極管(LED)和一個(gè)光敏三極管(或光敏二極管)組成,它們之間通過(guò)光信號(hào)連接,但電氣上完全隔離。當(dāng)LED端接收到電信號(hào)時(shí),它會(huì)發(fā)光,光敏三極管接收到光信號(hào)后,會(huì)產(chǎn)生相應(yīng)的電信號(hào)輸出。這種結(jié)構(gòu)使得光耦能夠在不直接接觸的情況下傳輸信號(hào),從而實(shí)現(xiàn)電氣
發(fā)表于 01-14 16:45
?14次閱讀
電子發(fā)燒友網(wǎng)站提供《AN-643:數(shù)字可變光衰減器中ADuC832 MicroConverter IC和對(duì)數(shù)轉(zhuǎn)換器AD8305的閉環(huán)控制電路實(shí)現(xiàn).pdf》資料免費(fèi)下載
發(fā)表于 01-14 16:44
?0次下載
優(yōu)化光耦電路以提高效率可以從多個(gè)方面進(jìn)行考慮和實(shí)施。以下是一些關(guān)鍵的優(yōu)化策略: 一、選擇高速光耦 高速光耦在設(shè)計(jì)和材料上進(jìn)行了優(yōu)化,具有更快的響應(yīng)時(shí)間和更低的分布電容。因此,在需要高速傳輸?shù)碾娐分校瑧?yīng)優(yōu)先選擇高速光耦。例如,6N135/6N136、6N137/6N138等型號(hào)的高速光耦在通信和控制系統(tǒng)中的應(yīng)用非常廣泛。 二、優(yōu)化電路設(shè)計(jì) 調(diào)整負(fù)載電阻 :負(fù)載電阻的阻值應(yīng)根據(jù)光耦的電流傳輸特性和分布電容進(jìn)行合理選擇。通過(guò)調(diào)整負(fù)載電阻的阻
發(fā)表于 01-14 16:44
?14次閱讀
光伏花紋玻璃亦稱(chēng)“光電玻璃”,利用太陽(yáng)輻射發(fā)電,并具有相關(guān)電流引出裝置的特種玻璃。它由玻璃、太陽(yáng)能電池片、膠片、背面玻璃、特殊金屬導(dǎo)線等組成,應(yīng)用廣泛,如太陽(yáng)能智能窗,以及光伏玻璃幕墻等。 ? ? ?而在生產(chǎn)階段需要將原料進(jìn)行混合、熔化、壓延、退火和切割等工藝才能制成光伏原片半成品。而在壓延的過(guò)程中,產(chǎn)品的厚度往往關(guān)系到產(chǎn)品的合格度。 項(xiàng)目需求 1、已知玻璃的厚度大約為2-3.5mm,需要測(cè)量出玻璃的精確厚度,并保證測(cè)
發(fā)表于 01-14 16:43
?6次閱讀
近日,以“聚力向新 質(zhì)贏未來(lái)”為主題的東風(fēng)乘用車(chē)公司2025年供應(yīng)鏈合作伙伴大會(huì)在武漢舉行,德賽西威在過(guò)去一年以高質(zhì)量的產(chǎn)品力和交付能力,贏得東風(fēng)乘用車(chē)高度認(rèn)可,獲頒“質(zhì)量貢獻(xiàn)獎(jiǎng)”。
發(fā)表于 01-14 16:43
?9次閱讀
Arm 不斷思考著計(jì)算的未來(lái)。無(wú)論是最新架構(gòu)的功能,還是用于芯片解決方案的新技術(shù),Arm 所創(chuàng)造和設(shè)計(jì)的一切都以未來(lái)技術(shù)的使用和體驗(yàn)為導(dǎo)向。 憑借在技術(shù)生態(tài)系統(tǒng)中所處的獨(dú)特地位,Arm 對(duì)全方位高度專(zhuān)業(yè)化、互聯(lián)的全球半導(dǎo)體供應(yīng)鏈有著充分的了解,覆蓋數(shù)據(jù)中心、物聯(lián)網(wǎng)、汽車(chē)、智能終端等所有市場(chǎng)。因而,Arm 對(duì)未來(lái)技術(shù)的發(fā)展方向及未來(lái)幾年可能出現(xiàn)的主要趨勢(shì)有著廣泛而深刻的洞察。 基于此,Arm 對(duì) 2025 年及未來(lái)的技術(shù)發(fā)展做出了以下預(yù)測(cè)
發(fā)表于 01-14 16:43
?14次閱讀
在快速發(fā)展的科技時(shí)代,智能控制器已經(jīng)成為各行各業(yè)不可或缺的重要組成部分。特別是在需要處理大電流的應(yīng)用場(chǎng)景中,50A大電流智能控制器以其出色的性能、穩(wěn)定性和靈活性,成為了市場(chǎng)關(guān)注的焦點(diǎn)。 技術(shù)特點(diǎn) 50A大電流智能控制器是一種集成傳感器、微處理器、通信模塊、電源管理等功能于一體的電子設(shè)備。根據(jù)預(yù)設(shè)的條件或用戶(hù)的指令,自動(dòng)調(diào)節(jié)室內(nèi)照明的亮度、色溫以及開(kāi)關(guān)狀態(tài),從而營(yíng)造出舒適、節(jié)能的照明環(huán)境。 功能作用 手動(dòng)控制:支持
發(fā)表于 01-14 16:43
?13次閱讀
隨著全球新能源汽車(chē)、人工智能、光伏及儲(chǔ)能等新興市場(chǎng)的蓬勃發(fā)展,高性能功率器件的需求呈現(xiàn)出前所未有的增長(zhǎng)態(tài)勢(shì)。在這一背景下,2025年1月8日于珠海金灣工廠京東方華燦與晶通半導(dǎo)體簽署了合作備忘錄,共同致力于寬禁帶半導(dǎo)體之氮化鎵(GaN)功率器件的研發(fā)與量產(chǎn),以創(chuàng)新驅(qū)動(dòng)行業(yè)發(fā)展,滿(mǎn)足市場(chǎng)日益增長(zhǎng)需求。
發(fā)表于 01-14 16:41
?16次閱讀
電子發(fā)燒友網(wǎng)站提供《EE-217:更新ADSP-TS101S TigerSHARC EZ-KIT Lite固件.pdf》資料免費(fèi)下載
發(fā)表于 01-14 16:39
?0次下載
評(píng)論