【惊天真相】ThreadLocal原理与源码分析-精品文档资料整理.docx
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《【惊天真相】ThreadLocal原理与源码分析-精品文档资料整理.docx》由会员分享,可在线阅读,更多相关《【惊天真相】ThreadLocal原理与源码分析-精品文档资料整理.docx(5页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、【惊天真相】ThreadLocal原理与源码分析 没有这篇我真的弄不懂 这篇观点正确 诲人不倦 一定是位技术深沉的前辈 好 闲言少叙 讲正题。 先是一个使用ThreadLocal的例子 private static final ThreadLocal Integer CONTEXT new ThreadLocal ();public void setVal(int i) CONTEXT.set(i);public int getVal() Integer val CONTEXT.get(); return val null ? 0 : val; 这是一个没什么用的例子 只为讲明问题。setVa
2、l方法可以往如今这个线程的“线程本地空间 先不用管这个名词啥意思 就当是线程间互不相关的各自的一块空间 里存进去一个Integer或更新已有Integer的值 getVal方法是获取这个值。threadlocal的作用就在于可以让每个线程各有各的值 互不影响 线程平安 那么从源码角度分析threadlocal是怎么做到的。 首先是看一下ThreadLocal.set(T value)这个方法 /* * Sets the current thread s copy of this thread-local variable * to the specified value. Most subcl
3、asses will have no need to * override this method, relying solely on the link #initialValue * method to set the values of thread-locals. * param value the value to be stored in the current thread s copy of * this thread-local. public void set(T value) Thread t Thread.currentThread(); ThreadLocalMap
4、map getMap(t); if (map ! null) map.set(this, value); else createMap(t, value); 来一行行看ThreadLocal在这里干了什么 先是获取当前线程 然后调用了getMap 传入当前线程作为参数 获得到了一个类型为ThreadLocalMap的对象。好 如今解决两个问题 注意接下来提到的类名 1、ThreadLocalMap是啥 跳过去看一下发现 ThreadLocalMap是ThreadLocal的一个内部类 ThreadLocalMap内部有一段这样的代码 static class Entry extends Wea
5、kReference ThreadLocal /* The value associated with this ThreadLocal. */ Object value; Entry(ThreadLocal k, Object v) super(k); value 看到这里可能很惊奇 “纳尼 键的类型是ThreadLocal 暂且搁置这个疑问 Entry的值是Object 嗯 看来每个线程里的“数据副本就是存在这。 2、getMap干了啥 跳过去看一下 是这样的 /* * Get the map associated with a ThreadLocal. Overridden in * I
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 惊天真相 天真 ThreadLocal 原理 源码 分析 精品 文档 资料 整理
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内