理解ThreadLocal

ThreadLocal(线程局部变量)

这个类提供线程局部变量。这些变量不同于正常同行,每一个线程访问一个(通过其 get或 set法)有自己独立的变量,初始化复制。 ThreadLocal实例通常是私有的静态字段在类希望关联状态的线程

通俗的理解:实现单个线程之间共享的变量,每个线程都有自己的ThreadLocal并且不会相互影响,并且可以随着线程的执行而往下传递。

目的

实现单个线程中变量的共享

使用

//声明
ThreadLocal<T> threadlocal = new Threadlocal<T>;
//设置值
threadlocal.set("value");
//获取值
threadlocal.get();
//移除
threadlocal.remove();

工作原理

ThreadLocal功能是掉用Map来实现的,使用ThreadLocal时就相当于使用了一个map,这个map会跟随着线程的执行从开始到结束,当线程执行到哪个地方需要设置或使用ThreadLocal里的数据数就可以使用set和get方法设置和获取。

1.调用set方法时:
首先调用Thread.currentThread方法获取当前线程,然后拿着当线程的实例作为key值取map中寻找相对应的值,再判断拿到的这个值是否为null,如果是null,这存入要存储的值,如果不为null则以当前实例为key找到再map中存储的位置,存入新值。

2.调用get方法时:
同样会先调用Thread.currentThread方法获取当前线程,然后以当前线程的实例作为key值查找到entry的值

提醒:在ThreadLocal中还有一个 initialValue() 方法,在没调用set方法设置值而直接调用get方法获取值时,那获的就是initialValue()方法初始化的值。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值