ThreadLocal 原理、使用场景
ThreadLocal 是什么?
ThreadLocal是 java 提供的一种线程局部变量,在 多线程环境下,它可以防止自己的变量被其他线程篡改,可以解决线程安全问题 (比使用synchronized更简单、方便,且 并发性 也更高)
ThreadLocal 原理

- Entry 对象的 key 为
ThreadLocal, value 为 实际变量的副本 (保证线程安全)
ThreadLocalMap类是ThreadLocal类的静态内部类,而Entry是ThreadLocalMap的静态内部类,其中 key 是ThreadLocal(声明为 弱引用),value 是Object,也就是我们要存的值。
- 在ThreadLocal中,进行get,set操作的时候会清除Map里所有key为null的value。
内存泄漏
但因为ThreadLocal是通过ThreadLocalMap实现的,而ThreadLocalMap的 生命周期 和当前线程一样长,当线程一直不结束的情况下,如果没有释放,就可能导致 内存泄漏。
1 | ThreadLocal<Integer> localNumber = new ThreadLocal(); |
为了避免内存泄漏,使用完ThreadLocal之后,记得要调用remove方法。
ThreadLocal 使用场景
ThreadLocal可以用来解决 数据库连接、还有 session 管理等。