- ThreadLocal:线程间共享的全局变量;
- ThreadLocalMap:是ThreadLocal实现线程隔离的关键,每个线程独立维护一个这样的Map,Map的结构单元是Entry,Entry的可以是指向ThreadLocal的弱引用,value是ThreadLocal里存的值;
弱引用在下一次GC时一定会被回收,而现在的线程都是通过线程池创建,生命周期不会结束,这样就会造成线程内的Map中有存在Key为null的值,永远不会被访问到了,这就造成了内存泄漏的风险;
在Java1.8之后,ThreadLocal在调用set、get、remove时都会清空Map中key为null的变量,但这也不能完全杜绝线程泄漏的风险,还是要在每次使用完ThreadLocal时,调用remove;