我是这样开始我的话:
(new MyThread()).start();
我没有在任何地方保留对它的引用,所以我想知道它是否是一种安全的方法 - GC不能收集它,因为它没有被引用?< / p>
如果不是(我想是的话),为什么呢?
答案 0 :(得分:5)
如果查看OpenJDK Java 7 source code of Thread
,您会注意到start()
包含以下内容
group.add(this);
其中group
是由{JVM管理的Thread
&#39; s ThreadGroup
。因此,当Thread
仍在运行时,始终可以访问Thread
。它不会被垃圾收集
如果单凭这一点并不令人信服,请考虑启动一个新线程意味着创建一个新的调用堆栈,其中根调用是native
方法之一,可能是Thread
} 方法。如果对象是垃圾收集的,则无法执行对象的方法。因此,{{1}}对象必须仍然存在。