ThreadLocal是什么
ThreadLocal類用來提供線程內部的局部變量
它主要有三大特性:
- 線程安全: 在多線程并發的場景下保證線程安全
- 傳遞數據:通過ThreadLocal在同一線程傳遞公共變量
- 線程隔離:每個線程的變量都是獨立的,不會互相影響
ThreadLocal使用場景
- Spring的事務
ThreadLocal 內存泄漏是怎么產生的
(1) 內存泄漏
內存溢出
:沒有足夠的內存提供申請者使用。
內存泄漏
:內存泄漏是指已經動態分配的堆內存由于某種程序原因未釋放或無法釋放
,造成系統內存的浪費。
(2) 弱引用
弱引用
:垃圾回收器一旦發現了有弱引用,不管當前內存足夠與否,都會回收
它的內存。
內存泄漏原因
:由于ThreadLocalMap的生命周期跟Thread一樣長,如果沒有手動刪除對應key就會導致內存泄漏
ThreadLocal怎么解決內存泄漏
1.使用完ThreadLocal,調用其remove方法刪除對應的Entry
2.使用完ThreadLocal,當前Thread也隨之運行結束
ThreadLocal的hash沖突怎么解決
ThreadLocal采用線性探測法
來解決hash沖突
該方法一次探測下一個地址,直到有空的地址后插入,若整個空間都找不到空余的地址,則產生溢出