ThreadLocal原理及內(nèi)存泄漏原因
ThreadLocal有兩個問題:
1. 每個變量副本是存儲在哪了?
2. 變量副本是怎樣從共享的變量中賦值出來的?源碼中threadlocal的初始值是什么時候設(shè)置的。
ThreadLocal為每個線程維護一個變量的副本?

每個線程的ThreadLocalMap都是線程自身持有的,但是初始化是在ThreadLocal中,然后每個線程相當(dāng)于保存了一個map
這個map存的key是LocalThread的實例,value是存儲的線程的局部變量
get方法

根據(jù)當(dāng)前線程獲取Thread中的值
set方法

根據(jù)當(dāng)前線程獲取當(dāng)前線程的map,然后設(shè)置當(dāng)前線程的值,
從而保證每個線程的值都是從自己的ThreadMap中獲取
ThreadLocal為什么會引起內(nèi)存泄漏

ThreadLocal的弱引用作為key,如果gc想要回收的時候,ThreadLcoal必然回收,Thread ref -> Thread ->ThreadLocalMap->Entry->value這個強引用一直就會存在,造成內(nèi)存泄漏
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
解決idea update project 更新選項消失的問題
這篇文章主要介紹了解決idea update project 更新選項消失的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01
詳解Springboot快速搭建跨域API接口的步驟(idea社區(qū)版2023.1.4+apache-maven-3.9.
這篇文章主要介紹了Springboot快速搭建跨域API接口(idea社區(qū)版2023.1.4+apache-maven-3.9.3-bin),本文通過圖文并茂的形式給大家介紹的非常詳細,需要的朋友可以參考下2023-07-07
Spring MVC 接口 ResponseBodyAdvice 及其應(yīng)用最佳實
ResponseBodyAdvice?是 Spring MVC 提供的一個強大接口,允許你在響應(yīng)體被寫入 HTTP 響應(yīng)之前對其進行全局處理,下面我將全面介紹它的工作原理、使用場景和最佳實踐,感興趣的朋友一起看看吧2025-04-04
Spring @Retryable注解輕松搞定循環(huán)重試功能
spring系列的spring-retry是另一個實用程序模塊,可以幫助我們以標(biāo)準(zhǔn)方式處理任何特定操作的重試。在spring-retry中,所有配置都是基于簡單注釋的。本文主要介紹了Spring@Retryable注解如何輕松搞定循環(huán)重試功能,有需要的朋友可以參考一下2023-04-04
SpringCloud聲明式Feign客戶端調(diào)用工具使用
這篇文章主要為大家介紹了SpringCloud聲明式Feign客戶端調(diào)用工具使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-08-08

