20230615 java.lang.ThreadLocal
介绍
- java.lang.ThreadLocal
- public class ThreadLocal
- 线程局部变量
API
static 方法
- withInitial
<S> ThreadLocal<S> withInitial(Supplier<? extends S> supplier)
- 创建一个线程局部变量, 其初始值通过调用给定的
supplier
生成
public 方法
- get
- 得到这个线程的当前值。如果是首次调用 get , 会调用 initialValue 来得到这个值
- set
- 为这个线程设置一个新值
- remove
- 删除对应这个线程的值
protected 方法
- initialValue
- 应覆盖这个方法来提供一个初始值。默认情况下,这个方法返回 null
代码理解
ThreadLocal.getMap
返回的是 Thread 类中的实例字段 threadLocals
// ThreadLocal 中
ThreadLocalMap getMap(Thread t) {
return t.threadLocals;
}
// Thread 中
ThreadLocal.ThreadLocalMap threadLocals = null;
ThreadLocalMap
中存储的是 Entry[] table
,而 Entry
的 key 是 ThreadLocal
对象, value 是局部变量值
所以每个 Thread 可以有多个 ThreadLocal 局部变量值,但是对于同一个 ThreadLocal 对象,只能有一个值