ThreadLocal的原理是什么?

提问者:帅平 问题分类:面试刷题
ThreadLocal的原理是什么?
1 个回答
Rae
Rae 管理员
为了搞清楚ThreadLocal的底层实现原理,我们不得不扒一下源码。
ThreadLocal的内部有一个静态的内部类叫:ThreadLocalMap。
ThreadLocal的get方法、set方法和setInitialValue方法,其实最终操作的都是ThreadLocalMap类中的数据。
其中ThreadLocalMap类的内部如下:
static class ThreadLocalMap {
    static class Entry extends WeakReference<ThreadLocal<?>> {
        Object value;
        Entry(ThreadLocal<?> k, Object v) {
            super(k);
            value = v;
        }
   }
   ...
   private Entry[] table;
   ...
}

ThreadLocalMap里面包含一个静态的内部类Entry,该类继承于WeakReference类,说明Entry是一个弱引用。
ThreadLocalMap内部还包含了一个Entry数组,其中:Entry = ThreadLocal + value。
而ThreadLocalMap被定义成了Thread类的成员变量。
public class Thread implements Runnable {
    ...
    ThreadLocal.ThreadLocalMap threadLocals = null;
}

下面用一张图从宏观上,认识一下ThreadLocal的整体结构:

从上图中看出,在每个Thread类中,都有一个ThreadLocalMap的成员变量,该变量包含了一个Entry数组,该数组真正保存了ThreadLocal类set的数据。
Entry是由threadLocal和value组成,其中threadLocal对象是弱引用,在GC的时候,会
发布于:1年前 (2022-10-20) IP属地:未知
我来回答