1.类结构
主要是使用内部静态类:ThreadLocalMap
既然是内部静态类那这一块就涉及到 内部静态类对象创建的相关知识点
ThreadLocal.ThreadLocalMap初始化
通过此方法:
public void set(T value) {
Thread t = Thread.currentThread();
ThreadLocalMap map = getMap(t);
if (map != null)
map.set(this, value);
else
createMap(t, value);
}
其中
void createMap(Thread t, T firstValue) {
t.threadLocals = new ThreadLocalMap(this, firstValue);
}
此方法标明了:
如果通过ThreadLocal存放变量到ThreadLocalMap中的时候如果 当前线程中引用的
ThreadLocal.ThreadLocalMap threadLocals = null;
则创建t.threadLocals = new ThreadLocalMap(this, firstValue);
并且将此ThreadLocalMap引用给threadLocals
通过上述分析总结如下几点:
1. 每个线程有自己独立的 ThreadLocalMap ,在此ThreadLocalMap 创建的时候将此对象的引用赋值给Thread的
ThreadLocal.ThreadLocalMap threadLocals
2.一个线程可以有多个ThreadLocal对象
3.ThreadLocalMap 里面存这以ThreadLocal对象为Key,ThreadLocal的值为值;
4.通过当前线程Thread对象获取此对象引用的ThreadLocalMap ,再通过ThreadLocal对象为可以获取存储的变量的值。
疑问?
如下代码:
public class ThreadLocalSimpleDemo {
public static void main(String[] args) {
Thread thread = Thread.currentThread();
System.out.println("测试ThreadLocal");
}
}
此thread在什么时候设置的ThreadLocal.ThreadLocalMap threadLocals赋值?