每個Thread都有一個ThreadLocal.ThreadLocalMap的map,該map的key為ThreadLocal實例,它為一個弱引
用,我們知道弱引用有利于GC回收。當ThreadLocal的key == null時,GC就會回收這部分空間,但是value卻不一
定能夠被回收,因為他還與Current Thread存在一個強引用關系,如下

在,就會出現內存泄漏情況。所以說只要這個線程對象能夠及時被GC回收,就不會出現內存泄漏。如果碰到線程
池,那就更坑了。 那么要怎么避免這個問題呢? 在前面提過,在ThreadLocalMap中的setEntry()、getEntry(),如
果遇到key == null的情況,會對value設置為null。當然我們也可以顯示調用ThreadLocal的remove()方法進行處
理。 下面再對ThreadLocal進行簡單的總結:
ThreadLocal 不是用于解決共享變量的問題的,也不是為了協調線程同步而存在,而是為了方便每個線程處理
自己的狀態而引入的一個機制。這點至關重要。
每個Thread內部都有一個ThreadLocal.ThreadLocalMap類型的成員變量,該成員變量用來存儲實際的
ThreadLocal變量副本。
ThreadLocal并不是為線程保存對象的副本,它僅僅只起到一個索引的作用。它的主要木得視為每一個線程隔
離一個類的實例,這個實例的作用范圍僅限于線程內部。