ThreadLocal為什么不用強引用


那為什么使用弱引用而不是強引用??

我們看看Key使用的

key 使用強引用

當hreadLocalMap的key為強引用回收ThreadLocal時,因為ThreadLocalMap還持有ThreadLocal的強引用,如果沒有手動刪除,ThreadLocal不會被回收,導致Entry內存泄漏。 譬如  設置:ThreadLocal=null  以后,應該會被回收的,但實際情況是ThreadLocalMap還有一個強引用,導致無法回收

key 使用弱引用

當ThreadLocalMap的key為弱引用回收ThreadLocal時,由於ThreadLocalMap持有ThreadLocal的弱引用,即使沒有手動刪除,ThreadLocal也會被回收。當key為null,在下一次ThreadLocalMap調用set(),get(),remove()方法的時候會被清除value值。

譬如  設置:ThreadLocal=null  以后,強引用已沒有,ThreadLocalMap還有一個弱引用,下次GC就會被回收


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM