写点什么

Java ThreadLocal

用户头像
陈皮
关注
发布于: 2020 年 08 月 05 日

解决了什么问题

同一线程中上下文中通信

性征

内存模型



使用

class X {        public static ThreadLocal threadLocal = new ThreadLocal();    ...    threadLocal.set("thread local value");    ...}
class Y { ... String value = (String)X.treadLocal.get(); ...}
复制代码

原理

问题:ThreadLocal 怎么做到共享变量线程私有的?

ThreadLocal 部分代码

...
public void set(T value) { Thread t = Thread.currentThread(); ThreadLocalMap map = getMap(t); if (map != null) { map.set(this, value); // this 指向 ThreadLocal 在堆中的实例对象 } else { creatMap(t, value); }}
...
void createMap(Thread t, T firstValue) { // 每个线程都会有各自的 map t.threadLocals = new ThreadLocalMap(this, firstValue);}
ThreadLocalMap getMap(Thread t) { return t.threadLocals;}
复制代码

共享 key(threadLocal 实例) ,线程私有 value(map values)。


TODO 线程池中使用

发布于: 2020 年 08 月 05 日阅读数: 77
用户头像

陈皮

关注

还未添加个人签名 2018.04.26 加入

还未添加个人简介

评论

发布
暂无评论
Java ThreadLocal