JDK8中ThreadLocal的设计
每个Thread维护一个ThreadLocalMap,这个map的key是ThreadLocal实例本身,value才是真正要存储的值Object。
Thread -> ThreadLocalMap -> <ThreadLocal实例对象, 变量副本>
jdk早期设计
ThreadLocal -> ThreadLocalMap -> <Thread, 变量副本>
JDK8设计的优势
1.每个Map存储的Entry数量变少。ThreadLocal肯定没有Thread线程多。
2.当Thread销毁时,ThreadLocalMap也会随之销毁,减少内存使用。
ThreadLocal的set方法源码
代码执行流程
首先获取当前线程,根据当前线程获取一个Map。
在map中以ThreadLocal的引用作为key来在Map中获取对应的Entry。
remove方法源码
移除的是Threa