ThreadLocal
来源:互联网 发布:java认证培训 编辑:程序博客网 时间:2024/06/12 23:31
ThreadLocal 是把对象交给当前线程管理。
每个Thread里有个ThreadLocalMap,内部为Entry数组,每个Entry的key为一个ThreadLocal实例,value为需要管理的对象。所以交给ThreadLocal管理的对象只与当前线程有关。
1、ThreadLocal的set方法
public void set(T value) { // 获取当前线程 Thread t = Thread.currentThread(); // 每个Thread 内部维护一个ThreadLocalMap // 每个ThreadLocalMap内部维护一个Entry // Entry的 key为 ThreadLocal,value 为一个Object ThreadLocalMap map = getMap(t); if (map != null) // 当前线程的ThreadLocalMap 已经存在 // this 代表当前的 ThreadLocal对象 // 每个 ThreadLocalMap 会有很多ThreadLocal // 所以Thread 是通过ThreadLocalMap 管理ThreadLocal 和他对应的Object map.set(this, value); else // 实例化当前线程的ThreadLocalMap,并把ThreadLocal 和 对象放进去 createMap(t, value); }
2、ThreadLocal的get方法
public T get() { // 获取当前线程 Thread t = Thread.currentThread(); // 获取当前线程的 ThreadLocalMap ThreadLocalMap map = getMap(t); if (map != null) { // 获取存放当前ThreadLocal 的Entity ThreadLocalMap.Entry e = map.getEntry(this); if (e != null) { // 取得ThreadLocal 对应的Object T result = (T) e.value; return result; } } // 初始化ThreadLocal, 设对应的Object为null return setInitialValue(); } private T setInitialValue() { T value = initialValue(); Thread t = Thread.currentThread(); ThreadLocalMap map = getMap(t); if (map != null) map.set(this, value); else createMap(t, value); return value; } protected T initialValue() { return null; }
阅读全文
0 0
- ThreadLocal
- ThreadLocal
- ThreadLocal
- ThreadLocal
- ThreadLocal
- ThreadLocal
- ThreadLocal
- ThreadLocal
- ThreadLocal
- ThreadLocal
- ThreadLocal
- ThreadLocal
- ThreadLocal
- ThreadLocal
- ThreadLocal
- threadlocal
- ThreadLocal
- ThreadLocal
- python 列表降维
- 初识MySQL数据库
- mybatis3.2.8 与 hibernate4.3.6 混用
- C++之纯虚函数和抽象类
- 《男人帮》经典语录
- ThreadLocal
- JavaScript基础 鼠标事件案例
- addEventlistener()方法
- 在CentOS中搭建服务器环境并且发布war包
- 关于类成员函数指针的再研究
- linux Ubuntu 新加磁盘的永久加载方法
- javaScript中的相等性判断
- 单链表反转的几种方法
- VUE 文件高亮显示标签