ThreadLocal什么时候回收
时间: 2023-10-17 08:36:37 浏览: 113
ThreadLocal的回收时机与它的引用关系密切相关。当ThreadLocalRef被回收时,其强引用消失,此时ThreadLocal只有一个弱引用指向。当没有其他强引用指向ThreadLocal对象时,即没有线程再使用这个ThreadLocal对象时,Heap中的ThreadLocal对象就会被回收。这也是为什么ThreadLocal能够起到线程隔离的作用的原因,因为每个线程持有自己的ThreadLocal对象,而不会与其他线程共享。
需要注意的是,ThreadLocal对象的回收时机并不是由程序主动控制的,而是由Java虚拟机的垃圾回收机制决定的。当ThreadLocal对象被回收后,与之关联的线程局部变量也会被自动清除。
需要指出的是,ThreadLocal的回收时机并不会立即触发回收,而是等待垃圾回收机制的运行。因此,如果在使用ThreadLocal的过程中,应尽量避免长时间持有ThreadLocal对象,以防止内存泄漏。当ThreadLocal对象不再被使用时,可以调用remove方法手动清除与之关联的线程局部变量。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *3* [谈谈你对ThreadLocal以及内存泄漏的理解](https://blog.csdn.net/weixin_43660088/article/details/127252687)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
- *2* [JDK源码系列:ThreadLocalMap内存泄漏“自动回收的触发场景”分析](https://blog.csdn.net/super_scan/article/details/129742823)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
阅读全文