【问题标题】:How to properly dispose of ThreadLocal variables?如何正确处理 ThreadLocal 变量?
【发布时间】:2015-02-04 21:06:48
【问题描述】:

处置ThreadLocal 变量以便它们接受垃圾回收的最干净的方法是什么?我从docs 中读到:

...在线程消失后,它的所有线程本地实例副本都将受到垃圾回收(除非存在对这些副本的其他引用)。

但有时线程可以被池化或预计不会死亡。 ThreadLocal#remove() 方法是否真的使值受到垃圾回收?

【问题讨论】:

    标签: java multithreading garbage-collection thread-local


    【解决方案1】:

    ThreadLocal.remove() 确实删除了对该值的引用...并且如果没有更多其他对它的引用:该值将很快被垃圾收集。

    当线程死亡时,线程从 GC-root 中移除...因此 ThreadLocal 中线程的条目受 GC... 因此 ThreadLocal 中此条目的值受 GC。但是再一次,如果你有另一个活的值引用:它不会被垃圾收集。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-05
      • 2011-12-01
      • 1970-01-01
      • 2012-11-07
      • 2019-03-09
      相关资源
      最近更新 更多