ThreadLocal 源码深度解析
ThreadLocal 源码深度解析
ThreadLocal 是 Java 中实现线程局部变量的重要类,下面我将从核心设计、关键实现和内存管理三个方面进行详细解读。
一、核心设计原理
-
数据结构设计:
- 每个 Thread 对象内部维护一个 ThreadLocalMap(类似 HashMap 但专为 ThreadLocal 优化)
- ThreadLocalMap 使用 ThreadLocal 实例作为 key,存储线程私有数据
- Entry 继承 WeakReference 防止内存泄漏
-
哈希算法优化:
private static final int HASH_INCREMENT = 0x61c88647; private static int nextHashCode() {return nextHashCode.getAndAdd(HASH_INCREMENT); }
- 使用斐波那契散列(魔数 0x61c88647)减少哈希冲突
- 每个 ThreadLocal 实例创建时分配唯一的 threadLocalHashCode
二、关键方法实现
1. get() 方法流程
public T get() {Thread t = Thread.currentThread();ThreadLocalMap map = getMap(t); // 获取当前线程的ThreadLocalMapif (map != null) {ThreadLocalMap.Entry e = map.getEntry(this);