1.线程私有变量
2.每个Thread对象都有一个ThreadLocalMap。
2.ThreadLocal内部含有ThreadLocalMap类,当调用ThreadLocal的set方法会先获取当前线程的ThreadLocalMap,然后将ThreadLocal对象作为键在map中获取值。
3.ThreadLocalMap内部的Entry类继承了弱引用,当ThreadLocal被回收时,Entry类的key也会被回收,防止内存泄漏。为了进一步回收掉Entry里的value,使用ThreadLocal.remove()。