博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java并行程序基础(十一)
阅读量:7144 次
发布时间:2019-06-28

本文共 955 字,大约阅读时间需要 3 分钟。

hot3.png

  • ThreadLocal
public void set(T value) {        Thread t = Thread.currentThread();        ThreadLocalMap map = getMap(t);        if (map != null)            map.set(this, value);        else            createMap(t, value);    }在set时,首先获得当前线程对象,然后通过getMap()拿到线程的ThreadLocalMap,并将值设入ThreadMap中。而ThreadLocalMap可以简单的理解为一个Map,但是它是定义在Thread内部的成员。ThreadLocal.ThreadLocalMap threadLocals = null;而设置到ThreadLocal中的数据,也正是写入了theadLocals这个Map。其中,key为ThreadLocal当前对象,value就是我们需要的值。而threadLocals本身保存了当前自己所在线程的所有“局部变量”,也就是一个ThreadLocal变量的集合。
public T get() {        Thread t = Thread.currentThread();        ThreadLocalMap map = getMap(t);        if (map != null) {            ThreadLocalMap.Entry e = map.getEntry(this);            if (e != null)                return (T)e.value;        }        return setInitialValue();    }get()方法也是先取得当前线程的ThreadLocalMap对象。然后,通过将自己作为key取得内部的实际的数据。

对于ThreadLocal内部原理,我也暂时处于懵逼状态,以后待续。。。。。

转载于:https://my.oschina.net/projerry/blog/872881

你可能感兴趣的文章
pycharm第一个Python程序
查看>>
第 32 章 Munin
查看>>
QQ VS MSN——QQ “只爱陌生人”,MSN “不和陌生人说话”
查看>>
Unique Binary Search Trees
查看>>
[LintCode] Perfect Squares 完全平方数
查看>>
ANE原生代码的调试(安卓)
查看>>
《基于MFC的OpenGL编程》Part 12 Creating and Using Display Lists
查看>>
JAVA EE 第一阶段考试
查看>>
Linq查询案例
查看>>
浅议DAS、NAS、SAN三种存储架构
查看>>
cxf 消息寻址
查看>>
contentType和dataType的区别
查看>>
软件测试---弹出窗口
查看>>
[LeetCode] Majority Element II
查看>>
ECharts 之一——入门
查看>>
第 21 章 H3C Switch
查看>>
[译]WebVR技术方案草案
查看>>
制作页面右下脚伸缩框样式
查看>>
Android 瘦身攻略
查看>>
二进制文件中读写结构体
查看>>