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 。