ThreadLocal 实现原理
在ThreadLocal
的get(),set()
的时候都会清除线程ThreadLocalMap
里所有key
为null
的value
。
而ThreadLocal的remove()方法会先将Entry中对key的弱引用断开,设置为null,然后再清除对应的key为null的value。
每一个Thread
维护一个ThreadLocalMap
映射表,映射表的key
是ThreadLocal
实例,并且使用的是ThreadLocal
的弱引用 ,value是具体需要存储的Object
。下面用一张图展示这些对象之间的引用关系,实心箭头表示强引用,空心箭头表示弱引用。
ThreadLocal local =