2015-02-04 57 views
1

处理变量ThreadLocal的最简洁方法是什么,以便它们受垃圾回收处理?如何正确处理ThreadLocal变量?

...一个线程消失之后,所有的线程局部实例的副本都会被垃圾回收(除非存在对这些副本的其他引用):我从docs读取。

但有时线程可以合并或不会死亡。 ThreadLocal#remove()方法是否真的使值受垃圾收集?

回答

2

ThreadLocal.remove()确实删除了对...和的引用,如果没有更多其他生活参考:值将很快垃圾收集。

当线程死亡时,线程从GC根目录中删除...因此ThreadLocal中线程的条目将受到GC ...因此,ThreadLocal中此条目的值受GC 。但是再一次,如果你有另一个活生生的价值:它不会被垃圾收集。

如果线程被重用(因为池的一部分或...):重要的是调用remove()以便该值可以被垃圾回收,但也可以避免在执行新作业时出现意外行为再生线程(新作业不需要知道前一份工作使用的值)