ThreadLocal 类结构

ThreadLocal 类是 java 中的一个重要的类,它的作用是提供线程安全的变量,可以在多个线程之间共享变量,而不会引起线程安全问题。ThreadLocal 类的结构包括以下几个部分:

1. ThreadLocal.ThreadLocalMap

ThreadLocalMap 是 ThreadLocal 的内部类,它用来存储 ThreadLocal 的变量,它是一个线程安全的 map,key 是 ThreadLocal 对象,value 是要存储的变量。

private static class ThreadLocalMap {
//...
static final int INITIAL_CAPACITY = 16;
Entry[] table;
//...
}
Java

2. ThreadLocal.ThreadLocalMap.Entry

Entry 是 ThreadLocalMap 的内部类,用来存储 ThreadLocal 的变量,它有两个属性,一个是 ThreadLocal 对象,一个是要存储的变量。

static class Entry extends WeakReference> {
/** The value associated with this ThreadLocal. */
Object value;
//...
}
Java

3. ThreadLocal.ThreadLocalMap.initialValue()

initialValue() 是 ThreadLocalMap 的内部方法,用来初始化 ThreadLocal 的变量,每个 ThreadLocal 对象都会调用这个方法,初始化自己的变量,子类可以重写这个方法,以实现自己的初始化逻辑。

protected Object initialValue() {
return null;
}
Java

4. ThreadLocal.get()

get() 是 ThreadLocal 的公共方法,用来获取 ThreadLocal 的变量,如果变量不存在,则会调用 initialValue() 方法初始化变量,然后返回变量。

public T get() {
Thread t = Thread.currentThread();
ThreadLocalMap map = getMap(t);
if (map != null) {
ThreadLocalMap.Entry e = map.getEntry(this);
if (e != null) {
@SuppressWarnings("unchecked")
T result = (T)e.value;
return result;
}
}
return setInitialValue();
}
Java