一、ThreadLocal 原理
1. 核心机制
ThreadLocal 用于为每个线程提供独立的变量副本,线程间数据隔离,避免线程安全问题。其实现依赖线程内部的 ThreadLocalMap
结构。
2. 实现细节
- 存储结构:每个线程(
Thread
类)内部维护一个ThreadLocalMap
,其键为ThreadLocal
实例,值为存储的数据。 - 哈希计算:通过
ThreadLocal
的哈希码(threadLocalHashCode
)确定在ThreadLocalMap
中的位置。 - 弱引用键:
ThreadLocalMap
的键(即ThreadLocal
对象)使用弱引用(WeakReference),防止内存泄漏(但值仍需手动清理)。
3. 关键源码逻辑
public class ThreadLocal<T> {
public T get() {
Thread t = Thread.currentThread();
ThreadLocalMap map = t.threadLocals;
if (map != null) {
ThreadLocalMap.Entry e = map.getEntry(this);
if (e != null) {
return (T) e.value;
}
}