ThreadLocal原理分析
来源:互联网 发布:mac os10.8.5升级10.11 编辑:程序博客网 时间:2024/05/20 04:27
今天早上突然想起一种线程封闭机制:线程封闭。然后脑子就出现了ThreadLocal类,查了一下源码,看了一下他的具体的实现原理。听我一一道来:
首先ThreadLocal有两个主要的方法set 和get:
先讲set吧,因为有存才有取嘛!
Thread.currentThread()方法很显然是获取当前线程。也就是你现在要使用ThreadLocal的线程啦。获取到当前线程后,调用getMap,贴一下getMap源码如下:
这里我们应该可以猜测的出来,每个Thread都有一个ThreadLocalMap域了,源码证明:
那么大家可能会疑惑,这是一个Map吗?是的,这是一个Map,但是他不是我们学习过的HashMap或者是TreeMap,它甚至于都没有实现Map接口。但是他的实现原理就是Map,你总不能说我是Map就一定要实现Map吧,哈哈哈。他的不同点在于只是用数组来存值,那么用数组是如何存键值的呢?不要心急:看源码:
里面是Entry[]数组来保存的,那么什么是Entry呢?首先它是内部类。然后他里面只有两个域,一个key,一个value。Easy to know,key肯定存的就是ThreadLocal的实例引用this,value就是你要保存的值。那么是如何取到这个线程独有的值呢?
这就是hash映射要完成的了。源码:
这个i就是通过计算ThreadLocal的this引用后得到的在Entry【】数组中的下标啦。当然肯定会冲突,至于hash冲突,想必大家都很了解了吧,我就不啰嗦了。取值的时候就是反过来即可。
-----------------------------------------------------------分------割-------线---------------------------------------------------
我超级不喜欢排版~~~~~~~~~~~~~
- ThreadLocal原理分析
- ThreadLocal原理分析
- ThreadLocal原理分析
- ThreadLocal原理与源码分析
- java中ThreadLocal技术原理分析
- Java ThreadLocal 内部实现原理 (源代码分析)
- ThreadLocal 原理
- ThreadLocal原理
- ThreadLocal原理
- ThreadLocal原理
- ThreadLocal原理
- ThreadLocal 原理
- ThreadLocal原理
- ThreadLocal 分析
- ThreadLocal 分析
- ThreadLocal-分析
- ThreadLocal-分析
- ThreadLocal分析
- WebView实现有道词典
- mysql学习3:索引,触发器,试图
- mysql学习4:select,update,insert,delete
- Linked vs. Embedded Resources(链接的资源与嵌入的资源)
- Android开源项目分类
- ThreadLocal原理分析
- raw数据结构
- 联网查看图片
- 运维入门
- 图像滤波函数imfilter函数的应用及其扩展
- 新安装的Ubuntu如何切换到root的方法
- Android 自动测试_monkey测试
- 人生思考
- C++ map的基本操作和使用