【总结】ThreadLocal
简介
-
threadlocal在线程间是隔离的,不共享,用于存储线程的变量
-
即使多个线程使用同一个ThreadLocal,也只能访问自己的属性
ThreadLocal是使用的Key/Value的结构实现,内部有一个ThreadLocalMap
内存泄漏问题
ThreadLocal 从理论上讲并不是用来解决多线程并发问题的,因为根本不存在多线程竞争。
在一些场景尤其是使用线程池)下,线程不会关闭,由于 ThreadLocal.ThreadLocalMap 的底层数据结构导致 ThreadLocal中key可以被回收,但是这些key为null的Entry的value就会一直存在一条强引用链,会造成内存泄漏的情况,应该尽可能在每次使用 ThreadLocal 后手动调用 remove(),以避免出现 ThreadLocal 经典的内存泄漏甚至是造成自身业务混乱的风险。