使用ThreadLocal注意事項


1,內存泄漏或產生臟數據

  (1)使用ThreadLocal時,會在線程的私有的Map對象中存儲對應的變量值Value,對應的key為ThreadLocal對象本身。當線程為普通線程執行完邏輯就銷毀時,

Map對象會被回收,當線程為線程池線程時,執行完任務后,線程並沒有銷毀所以Map對象任然存在,且里面的內容Value沒有被刪除。執行的次數多了后,就會產生內存泄漏。

  (2)當線程再次使用之前的ThreadLocal對象獲取值時能獲取到對應的Value,但這個值是上一次設置進去的,本次並沒有設置Value值。所以也會產生臟數據。

2,inheritableThreadLocals 是主線程創建子線程時,會同步拷貝一個到子線程對應的inheritableThreadLocals對象里面。子線程可以拿到父線程在里面設置的值。

3,線程對象由兩個Map對象,threadLocals,和inheritableThreadLocals  當ThreadLocal對象為ThreadLocal時set和get的對象是threadLocals(Map),當ThreadLocal對象

是InheritableThreadLocal時,set和get的對象是inheritableThreadLocals  。


免責聲明!

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



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