
作用存储线程独有的变量数据原理每个线程有一个ThreadLocalMap对象该对象也是HashMap结构key为ThreadLocal对象的WeakReferencevalue为具体存储的数据对象。ThreadLocal对象在set具体value对象时实际上是往当前线程的ThreadLocalMap中put数据而get数据时也是在读当前线程的ThreadLocalMap。内存泄漏风险ThreadLocal对象的业务生命周期结束后一定要调用remove方法否则会因为ThreadLocalMap强引用了对应的value对象而导致value对象无法被回收为什么key是弱引用这是一个避免用户忘记调用remove方法的补救措施jvm的垃圾回收策略针对弱引用在gc时立即回收所以jvm一旦触发gcThreadLocalMap的key就一定会回收。同时还有一个兜底机制来补救value的回收那就是每次get和set时都会针对key为null的entry进行回收