java中ThreadLocal第二篇
- 2017-01-05 09:56:00
- admin 原创
- 1901
上篇的执行结果为
线程0的初始value:0
线程1的初始value:0线程4的初始value:0
线程3的初始value:0
线程2的初始value:0
线程3的累加value:36
线程4的累加value:36
线程1的累加value:36
线程0的累加value:36
线程2的累加value:36
可以看到,各个线程的value值是相互独立的,本线程的累加操作不会影响到其他线程的值,真正达到了线程内部隔离的效果。protected T initialValue() {return null;}设置ThreadLocal的初始值
简单解析一下,get方法的流程是这样的:
- 首先获取当前线程
- 根据当前线程获取一个Map
- 如果获取的Map不为空,则在Map中以ThreadLocal的引用作为key来在Map中获取对应的value e,否则转到5
- 如果e不为null,则返回e.value,否则转到5
- Map为空或者e为空,则通过initialValue函数获取初始值value,然后用ThreadLocal的引用和value作为firstKey和firstValue创建一个新的Map
然后需要注意的是Thread类中包含一个成员变量:
|
所以,可以总结一下ThreadLocal的设计思路:
每个Thread维护一个ThreadLocalMap映射表,这个映射表的key是ThreadLocal实例本身,value是真正需要存储的Object。
发表评论
文章分类
联系方式
联系人: | 郑州-小万 |
---|---|
电话: | 13803993919 |
Email: | 1027060531@qq.com |
QQ: | 1027060531 |
网址: | www.wanhejia.com |
Update Required
To play the media you will need to either update your browser to a recent version or update your Flash plugin.