ThreadLocal原理
ThreadLocal 就是个空壳,本质类似于Map键值对中的一个Key
每个线程对象中,有一个类型为ThreadLocalMap的threadLocals变量。
存储数据时,把这个ThreadLocal做为key,value就是你要存的数据存到这个线程的这个变量中。这就是为什么它能在多线程做到能隔离的效果。
内存泄漏问题
这个其实要和Java的GC机制有关。Java线程中的这个threadLocals变量,可以看成一个map,它这个key便是对ThreadLocal的一个弱引用。
注:Java的GC回收机制采用的是可达性分析算法。简单的可以理解为这个对象是否被其他对象引用(强引用,软引用在内存没有满的时候可能也不会被GC)。弱引用就不管用了,相当于没有引用。这样就导致了ThreadLocal会被回收掉。但是value却没有被一并清除掉。
解决办法:
- 确保ThreadLocal不会被GC
- 使用完调用remove方法
- get/set方法会清除key为null的数据
ThreadLocal内存泄漏与解决方案
ThreadLocal原理详解,其在多线程环境下提供数据隔离。然而,由于弱引用特性可能导致内存泄漏,解决办法包括避免ThreadLocal被GC及使用后及时调用remove方法清理。了解这些能有效防止内存资源浪费。
537

被折叠的 条评论
为什么被折叠?



