20230615 java.lang.ThreadLocal

发布时间 2023-08-22 17:41:49作者: 流星<。)#)))≦

介绍

  • 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 对象,只能有一个值