ThreadLocal原理分析

从Java官方文档中的描述:ThreadLoacl类用来提供线程内部得局部变量,这种局部变量在多线程得环境下访问时(通过get()
和set()方法)能够保证各个线程得变量相对对立于其他线程内得变量。ThreadLocal实例通常来说都是private
static类型的,用于关联线程和线程得上下文。

ThreadLoacl的主要作用就是将数据放入到当前的线程对象中的Map里,这个Map是Thread类的实例变量。类ThreadLoacl自己不管理,不存储任何数据,她只是数据和Map之间的桥梁,用于将数据放入到map中。执行后每个线程中的Map存有自己的数据,Map中的key存储的是ThreadLoacl对象,value 存储的就是值,每个Thread中的Map值只对当前线程可见,当前线程销毁,map随之销毁,Map中的数据没有被引用,没有被使用,则随时被GC收回。

ThreadLoacl的作用是:提供线程内的局部变量,不同的线程之间不会相互干扰,这种变量在线程的声明周期内起作用,减少同一个线程内多个函数或组件之间一些公共变量传递的复杂度。

简单得就是说,一个Threadlocal在一个线程中是共享的,在不同的线程之间又是隔离的(每个线程都只能看到自己的线程值)

简单的例子如下图所示:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

ThreadLocal 底层代码,如下图
在这里插入图片描述
ThreadLocal核心作用:实现线程范围的局部变量

ThreadLocal的原理分析

每个Thread 对象都有一个ThreadLocalMap. 当创建Threadlocal 的时候,就会将该Threadlocal 对象加到Map中,其中键就是Threadlocal ,值可以是任意类型。

向Threadlocal 存入一个值,实际上是向当前线程对象中ThreadlocalMap存入值,ThreadlocalMap我们可以简单理解成为一个Map,而向这个Map存值得key,就是Threadlocal本身。
在这里插入图片描述
也就是说想,想存入的Threadlocal中得数据实际上并没有存入到Threadlocal对象中,而是以这个Threadlocal实例作为key存到了当前线程中得一个Map中去了,获取ThreadLocal的值时同样也是这个道理。这也就是为什么ThreadLocal可以实现线程之间隔离的原因了

总结

ThreadLocal得作用:实现线程范围内的局部变量,即ThreadLocal在一个线程中是共享的,在不同线程之间是隔离的。
ThreadLocal的原理:ThreadLocal存入值时使用当前ThreadLocal实例作为key,存入当前线程对象中的Map中去。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值