3.1. ThreadLocal 简介

如果你创建了一个ThreadLocal变量,那么访问这个变量的每个线程都会有这个变量的本地副本,这也是ThreadLocal变量名的由来。

3.3. ThreadLocal 原理

Thread 有变量ThreadLocal.ThreadLocalMap threadLocals = null;
调用ThreadLocal 类的 set或get方法时才创建它们,实际上调用这两个方法的时候,我们调用的是ThreadLocalMap类对应的 get()、set()方法。

3.4. ThreadLocal 内存泄露问题

ThreadLocalMap 中使用的 key 为 ThreadLocal 的弱引用,而 value 是强引用。
set()、get()、remove() 方法的时候,会清理掉 key 为 null 的记录。
使用完 ThreadLocal方法后 最好手动调用remove()方法