【73、ThreadLocal有什么用,平常怎么用的,底层原理是什么】

66 阅读1分钟

ThreadLocal 是 Java 中的一个类,可以让我们创建线程本地变量,即每个线程拥有自己独立的变量副本。通常情况下,如果多个线程同时访问同一个共享变量,会存在线程安全问题。使用 ThreadLocal 可以解决多线程并发访问共享变量的问题,提高代码的并发性和安全性。

在平常的使用中,ThreadLocal 主要用于保存线程的上下文信息,例如当前登录用户、请求信息等等。可以通过 ThreadLocal.set() 方法将值设置到当前线程中,然后通过 ThreadLocal.get() 方法获取该值。每个线程可以独立访问自己的值,不会受到其他线程的干扰。

ThreadLocal 的底层原理是通过在每个线程的 Thread 对象中维护一个 ThreadLocalMap 类型的变量来实现的。ThreadLocalMap 实际上是一个数组,用于存储每个线程的变量值,数组的下标是 ThreadLocal 对象的 hash 值。当我们通过 ThreadLocal.set() 方法设置一个值时,实际上是先获取当前线程的 Thread 对象中的 ThreadLocalMap,然后将值存储在其中。当我们通过 ThreadLocal.get() 方法获取一个值时,也是先获取当前线程的 Thread 对象中的 ThreadLocalMap,然后从中根据 ThreadLocal 的 hash 值获取相应的值。

需要注意的是,ThreadLocal 在使用完毕后必须手动调用 ThreadLocal.remove() 方法将其从当前线程中移除,避免内存泄漏问题。