JDK成长记12:ThreadLocal (下)

file

上一节你弄懂了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对。

如下图所示:

file

JVM中的强引用、弱引用、软引用、虚引用基础知识

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值