ThreadLocal个人理解
来源:互联网 发布:sql select 不等于 编辑:程序博客网 时间:2024/06/17 23:39
为了加深理解,将最近对ThreadLocal的了解和源码分析记录总结一下。
ThreadLocal可以为线程提供局部变量。使用ThreadLocal的get()方法,可以在当前线程能够访问的类和方法中,得与当前线程相关联的变量值。
不过,线程局部变量并不是由ThreadLocal对象保存维护的,而是保存在相关联的线程中。ThreadLocal对象只是作为一个key,为当前线程提供了
查找局部变量的线索。也就是说,不同的线程,以相同的ThreadLocal对象作为key,可以查找到相关联的变量值。
下面是ThreadLocal源码:
以上代码用于生成与每个ThreadLocal对象的key,key值存放在threadLocalHashCode变量中。AtomicInteger类保证了线程安全。
将当前ThreadLocal对象作为key值,而将与当前线程相关联的变量值作为value,存放在一个map中。
该map保存在当前线程的threadLocals变量中。这个map保存了所有的和该线程关联的局部变量。
当需要与当前线程相关联的局部变量时,用get()方法取出。从当前线程的threadLocals中取出局部变量map,以当前ThreadLocal为key进行查找。
ThreadLocalMap是ThreadLocal的一个内部类,为局部变量的存储提供数据结构。在ThreadLocalMap内部,数据存储是由一个继承了WeakReference<ThreadLocal>类的Entry类型的数组来实现的,该数组以table作为其变量名。弱引用保证了在table过大的时候,可以将过于陈旧(stale)的Entry回收,而不是报出OutOfMemoryException。并且,ThreadLocalMap提供了一套算法,可以根据当前ThreadLocal对象的threadLocalHashCode值,快速的在table数组中定位。
- ThreadLocal个人理解
- ThreadLocal的个人理解
- ThreadLocal的个人理解
- ThreadLocal的一点个人理解
- 理解ThreadLocal
- 理解ThreadLocal
- 理解ThreadLocal
- 理解ThreadLocal
- 理解ThreadLocal
- 理解ThreadLocal
- 理解ThreadLocal
- 理解ThreadLocal
- 理解ThreadLocal
- 理解ThreadLocal
- 理解Threadlocal
- 理解ThreadLocal
- 理解ThreadLocal
- 理解ThreadLocal
- Android中activity A 启动 activity B时的细节问题
- android 9 patch 图片(.9.png 格式图片) 的特点和制作_oisoft 机器人图片
- 各进制基数、符号及示例
- 并查集 & 路径压缩
- object.c c++ mixed code and it support the stl
- ThreadLocal个人理解
- java.lang.NullPointerException异常,没有输出stackTrace的信息
- CountDownLatch的使用方法
- Android 平台搭建和Hello World
- 虚拟机中ubuntu挂载nfs成功,并为arm11烧录YAFFS2文件系统
- 发挥优势,无论什么优势;控制弱点,无论什么弱点
- 如何取得IP用户名等信息
- Linux信号量 sem_t简介
- c++构造函数不能使用本class对象作为参数