文章目录

简介

  • threadlocal在线程间是隔离的,不共享,用于存储线程的变量

  • 即使多个线程使用同一个ThreadLocal,也只能访问自己的属性

ThreadLocal是使用的Key/Value的结构实现,内部有一个ThreadLocalMap

内存泄漏问题

ThreadLocal 从理论上讲并不是用来解决多线程并发问题的,因为根本不存在多线程竞争。

在一些场景尤其是使用线程池)下,线程不会关闭,由于 ThreadLocal.ThreadLocalMap 的底层数据结构导致 ThreadLocal中key可以被回收,但是这些key为null的Entry的value就会一直存在一条强引用链,会造成内存泄漏的情况,应该尽可能在每次使用 ThreadLocal 后手动调用 remove(),以避免出现 ThreadLocal 经典的内存泄漏甚至是造成自身业务混乱的风险。