1. 程式人生 > 程式設計 >ThreadLocal原理及記憶體洩漏原因

ThreadLocal原理及記憶體洩漏原因

ThreadLocal有兩個問題:

1. 每個變數副本是儲存在哪了?

2. 變數副本是怎樣從共享的變數中賦值出來的?原始碼中threadlocal的初始值是什麼時候設定的。

ThreadLocal為每個執行緒維護一個變數的副本?

每個執行緒的ThreadLocalMap都是執行緒自身持有的,但是初始化是在ThreadLocal中,然後每個執行緒相當於儲存了一個map

這個map存的key是LocalThread的例項,value是儲存的執行緒的區域性變數

get方法

根據當前執行緒獲取Thread中的值

set方法

根據當前執行緒獲取當前執行緒的map,然後設定當前執行緒的值,

從而保證每個執行緒的值都是從自己的ThreadMap中獲取

ThreadLocal為什麼會引起記憶體洩漏

ThreadLocal的弱引用作為key,如果gc想要回收的時候,ThreadLcoal必然回收,Thread ref -> Thread ->ThreadLocalMap->Entry->value這個強引用一直就會存在,造成記憶體洩漏

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。