浅学ThreadLocal

ThreadLocal是什么?

一种线程隔离机制,保证了多线程环境下访问共享变量的安全性。在多线程访问共享变量的这个场景下,我之前学到的是通过对共享变量加锁来实现在同一时刻只有一个线程可以更新共享变量,其他线程也可以立刻看到(happens-before规则里面的一个锁监听器)。

那这个threadlocal又是怎么实现的呢?

threadlocal在每一个线程里面都提供了一个容器,然后拷贝一个共享变量的副本,放到这个容器里面,每个线程就可以独立地操作更新自己的变量副本,从而影响不到其他地线程。但它并不是多线程同步机制的一种,只是一个在多线程环境下,为变量安全提供的一种解决思路。

threadlocal里面有一个内部类threadlocalmap,这个类才是真正实现线程隔离机制地关键,threadlocalmap内部类似于map,是由键值对组成地entry数组,key是threadlocal本身地弱引用,value就是对应的线程变量副本。

1、threadloacl本身并不存储值,只提供key

2、threadlocal包含在thread中,是thread的一个局部变量

ThreadLocal的方法

  • get     用来获取ThreadLocal在当前线程中保存的变量副本
  • set     用来设置当前线程中变量的副本
  • remove   用来移除当前线程中变量的副本
  • initialValue   是一个protected方法,一般是用来在使用时进行重写的

疑问

操作的副本,别的线程怎么看见更新后的变量值?

我寻思,像银行取钱这种需要同步的,不用ThreadLocal不就完了?不行吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值