天热无聊,打开项目学习下项目里的代码,看到有大牛用到了ThreadLocal 这个类了,好奇心顿时不由而来,经各方打探和学习总结了下,其实也不是总结,就是把人家告诉我的写到这,然后告诉大家,如有雷同,纯属巧合,如有错误,还请指点。
首先大牛举了个厕所蹲坑的例子:
假如在厕所的每个蹲坑隔间里没有卫生纸,每个人只能在隔间外面一个公共的地方抽纸,这个擦屁股的手纸是公用的,且某个时刻只能有一个人去抽纸。这样在生活中,如果人多,就会排队,效率地下(暂且不说万一没有纸会怎么样) 内急的岂不是屎涨裤裆里了。所以每个蹲坑间放一卷手纸。这样,原来公用的手纸都被各个蹲坑间私有化了,外界不能干涉,即便别人蹲坑的时候用没了纸,也不会打扰到你蹲坑的心情。
好下面我们在稍加专业点来解释
如果公共变量多个线程去访问 不加锁会导致变量值混乱,无法控制。
加锁又会导致并发性能。加锁的意思就好比厕所里需要拿手纸的都给我一个个排队拿。所以多放几份了。各自用各自的 互不影响。
专业点说:
当你的公共变量 A线程对该变量的修改不会影响到B线程,同理B线程也不会影响到A线程,即各个线程对共享变量的修改是独立的,多个线程之间不需要实时共享变量数据时,才可以使用ThreadLocal。
再就是有些多线程用不到Threadlocal,比如减库存操作可能会有多个线程去减。但是A线程的修改 B线程必须要能够读到。此时就不能用ThreadLocal了。
不知道大家ThreadLocal 明白了没,如果有的地方写错了,还请指点出来。
最后感谢益达 大牛的热心解读,他的更多博客请参考http://iamyida.iteye.com/
相关推荐
java ThreadLocal多线程专属的变量源码java ThreadLocal多线程专属的变量源码java ThreadLocal多线程专属的变量源码java ThreadLocal多线程专属的变量源码java ThreadLocal多线程专属的变量源码java ThreadLocal多...
java 简单的ThreadLocal示例
ThreadLocal保证一个类的实例变量在各个线程中都有一份单独的拷贝, 从而不会影响其他线程中的实例变量
简单分析Java线程编程中ThreadLocal类的使用共4页.pdf.zip
Java线程:概念与原理 Java线程:创建与启动 Java线程:线程状态的转换 ...Java线程:深入ThreadLocal 一、标准例子 二、不用ThreadLocal 三、自己实现个ThreadLocal 四、透过现象看本质 Java线程:大总结
详解java底层实现原理,ThreadLocal底层实现的数据结构,为什么不会导致内存泄露
主要介绍了Java单线程ThreadLocal串值问题解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
synchronized关键字不属于方法特征签名的一部分,所以可以在覆盖方法的时候加上去。也就是说,在父类的方法声明上可以没有synchronized关键字,而在子类覆盖该方法时加上synchronized关键字。 注意:使用...
Java中ThreadLocal的设计与使用.doc
Java资料—详解ThreadLocal ;Java资料—详解ThreadLocal ;Java资料—详解ThreadLocal ;Java资料—详解ThreadLocal Java资料—详解ThreadLocal
早在 JDK 1.2 的时代,java.lang.ThreadLocal 就诞生了,它是为了解决多线程并发问题而设计的,只不过设计得有些难用,所以至今没有得到广泛使用。其实它还是挺有用的,不相信的话,我们一起来看看这个例子吧。 一个...
关于线程变量ThreadLocal的介绍以及说明. 关于线程变量ThreadLocal的介绍以及说明. 关于线程变量ThreadLocal的介绍以及说明. 关于线程变量ThreadLocal的介绍以及说明. 关于线程变量ThreadLocal的介绍以及说明. ...
java 多线程 ThreadLocal
ThreadLocal则为每一个线程提供了一个变量副本,从而隔离了多个线程访问数据的冲突,ThreadLocal提供了线程安全的对象封装,下面我们就来详细了解一下吧
主要介绍了Java线程编程中ThreadLocal类的使用,包括使用其对共享变量的操作的分析,需要的朋友可以参考下
本例以序列号生成的程序为例,展示ThreadLocal的使用
主要介绍了Java多线程编程之ThreadLocal线程范围内的共享变量,本文讲解了ThreadLocal的作用和目的、ThreadLocal的应用场景、ThreadLocal的使用实例等,需要的朋友可以参考下
主要介绍了彻底理解Java 中的ThreadLocal的相关资料,需要的朋友可以参考下
ThreadLocal翻译成中文比较准确的叫法应该是:线程局部变量。使用这个工具类可以很简洁地编写出优美的多线程程序。接下来通过本文给大家介绍Java中的ThreadLocal,需要的朋友可以参考下
2.3 线程本地存储(Java.lang.ThreadLocal) 15 2.4 线程阻塞 17 2.4.1 调用sleep(millisecond)使任务进入休眠状态 17 2.4.2 等待输出与输入 17 2.4.3 对象锁不可用 17 2.4.4 通过wait()使线程挂起。 17 2.5 线程...