ThreadLocal 用法

有这样的需求:我们需要多个类或方法共享同一个变量,那我们可以把这样的变量声明成一个static即可。

如果我们加入了多线程概念的话,这个变量被多个线程共享时,会出现竞争的情况。所以肯定会引发一系列的问题。

 

我们现在只讨论其中的一种,就是这个变量各个线程独自拥有,但每个线程里的类或方法共享这个变量。

 

ThreadLocal可以解决这个问题。

 

但在此之前我们想想可以怎么解决:

如果每个线程单独共享这个变量,那我们可以把每个线程id和这个变量用键值对的形式给存储起来,每次一个线程set的时候传入他的线程id,如果map中有这个id直接访问。每当线程结束时,记得要释放这个引用,不然会导致内存的泄漏。 这里还有一个问题,就是这个map可以被多个线程访问,那么这个map就要处理线程共享同一个变量的问题。

进一步思考,如果我们把这个变量存储在每个线程中,这样就不用处理加不加锁的问题了

这个变量归这个线程所有,我们存取的时候只是根据当前的线程id来获得这个变量,

也就是说,我们所有的线程共享的只是这些方法,而不是这个变量。

 

ThreadLocal 原理,下面这位老兄说得很好了,直接粘过来了

http://www.cnblogs.com/dolphin0520/p/3920407.html

 

  

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值