java 线程篇 Threadlocal 新知

天热无聊,打开项目学习下项目里的代码,看到有大牛用到了ThreadLocal 这个类了,好奇心顿时不由而来,经各方打探和学习总结了下,其实也不是总结,就是把人家告诉我的写到这,然后告诉大家,如有雷同,纯属巧合,如有错误,还请指点。

首先大牛举了个厕所蹲坑的例子:

假如在厕所的每个蹲坑隔间里没有卫生纸,每个人只能在隔间外面一个公共的地方抽纸,这个擦屁股的手纸是公用的,且某个时刻只能有一个人去抽纸。这样在生活中,如果人多,就会排队,效率地下(暂且不说万一没有纸会怎么样) 内急的岂不是屎涨裤裆里了。所以每个蹲坑间放一卷手纸。这样,原来公用的手纸都被各个蹲坑间私有化了,外界不能干涉,即便别人蹲坑的时候用没了纸,也不会打扰到你蹲坑的心情。

好下面我们在稍加专业点来解释

如果公共变量多个线程去访问 不加锁会导致变量值混乱,无法控制。
加锁又会导致并发性能。加锁的意思就好比厕所里需要拿手纸的都给我一个个排队拿。所以多放几份了。各自用各自的 互不影响。

专业点说:

当你的公共变量  A线程对该变量的修改不会影响到B线程,同理B线程也不会影响到A线程,即各个线程对共享变量的修改是独立的,多个线程之间不需要实时共享变量数据时,才可以使用ThreadLocal。

再就是有些多线程用不到Threadlocal,比如减库存操作可能会有多个线程去减。但是A线程的修改  B线程必须要能够读到。此时就不能用ThreadLocal了。

不知道大家ThreadLocal 明白了没,如果有的地方写错了,还请指点出来。

最后感谢益达 大牛的热心解读,他的更多博客请参考http://iamyida.iteye.com/

猜你喜欢

转载自510197929li.iteye.com/blog/2375329