您的位置:首页 > 其它

ThreadLocal源码分析

2016-09-18 23:19 405 查看
每次看到ThreadLocal总要重新复习一下源码,今天总结一下:

每个Thread类中有ThreadLocal.ThreadLocalMap threadLocals = null;这样的成员变量,ThreadLocalMap 是ThreadLocal的一个内部类,其中存储了当前ThreadLocal以及对应的value,这个threadLocals其实是一个map类型,会存储好多个键值对,相当于存储好多个ThreadLocal 对应的值

public void set(T value) {
Thread t = Thread.currentThread();
ThreadLocalMap map = getMap(t);
if (map != null)
map.set(this, value);//这个this是当前的ThreadLocal对象,每一次就把当前的ThreadLocal对应的值存入map
else
createMap(t, value);
}
ThreadLocalMap getMap(Thread t) {
return t.threadLocals;
}

void createMap(Thread t, T firstValue) {
t.threadLocals = new ThreadLocalMap(this, firstValue);//如果还没有这个map,就创建,一个线程对应一个map,但map中可以存好多ThreadLocal变量
}
可以这么理解,每个Thread类中都有自己当前的map,每个map可以存储多对ThreadLocal,而键就是ThreadLocal对象,值就是所存的值
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: