线程本地垃圾回收
来自 javadoc
每个线程都持有对其线程局部变量副本的隐式引用,只要该线程处于活动状态并且 ThreadLocal 实例可访问;线程消失后,其线程本地实例的所有副本都将受到垃圾回收(除非存在对这些副本的其他引用)。
由此看来,ThreadLocal 变量引用的对象似乎仅在线程死亡时才被垃圾回收。但是,如果 ThreadLocal 变量不再被引用并且受垃圾回收的影响,该怎么办?如果 hold 的线程仍处于活动状态,则仅按变量进行的对象引用是否会受到垃圾回收的影响?a
a
a
例如,有以下带有 ThreadLocal 变量的类:
public class Test {
private static final ThreadLocal a = ...; // references object b
}
此类引用某些对象,而此对象没有其他引用。然后在上下文取消部署期间,应用程序类装入器成为垃圾回收的主题,但线程来自线程池,因此它不会死亡。对象是否会成为垃圾回收的对象?b