ThreadLocal
是 Java 中的一个线程局部变量工具类,它允许每个线程都有自己独立的变量副本,而不会相互干扰。ThreadLocal
的底层原理涉及到 ThreadLocalMap
和 Thread
类。
在 ThreadLocal
内部,使用一个 ThreadLocalMap
对象来存储每个线程对应的变量值。当调用 set()
方法设置变量值时,实际上是将当前线程作为 key,将要设置的值作为 value 存储到当前线程的 ThreadLocalMap
中;当调用 get()
方法获取变量值时,ThreadLocal
会通过当前线程作为 key 在 ThreadLocalMap
中查找对应的值并返回。
在多线程环境下,每个线程都拥有自己的 ThreadLocalMap
,这样就能保证线程之间的变量相互隔离,不会相互影响。当线程结束时,ThreadLocalMap
会被一同销毁,从而避免内存泄漏。
需要注意的是,由于 ThreadLocal
的特殊性(即每个线程拥有一份独立的变量副本),在使用过程中需要特别小心,避免出现内存泄漏和数据混乱的情况。