上一节你弄懂了ThreadLocal是什么、它的基本使用方式、get方法的底层原理。这一节让继续深入研究下:
- ThreadLocal的set源码原理
- JVM的中的强引用、弱引用、软引用、虚引用
- 弱引用在ThreadLocal的应用
- ThreadLocal内存泄漏问题分析
- ThreadLocal应用场景举例
ThreadLocal set方法源码原理
ThreadLocal set方法源码原理
你有了阅读threadLocal的get方法的经验,set方法的源码会变得非常简单。set源码如下所示:
public void set(T value) {
Thread t = Thread.currentThread();
ThreadLocalMap map = getMap(t);
if (map != null)
map.set(this, value);
else
createMap(t, value);
}
上面的脉络是不是很清楚,相信我都不需要画图大家就能理解,和上一节get方法调用的setInitialValue几乎一模一样,只是没有了initialValue()方法而已。
如果当前线程第一次使用threadLcoal.set(Obejct),(假设当前线程之前也没有调用过get方法),就会创建一个默认大小为16的threadLocalMap,并且将key设为threadLocal对象,value设置为对应的某个Object。
如果是第二次set肯走的是map.set(this, value);这句话的分支,直接向当前线程的threadLocalMap中设置一个key-value对。
如下图所示: