安全启动线程而不保持参考?

时间:2014-04-04 22:55:21

标签: java multithreading

我是这样开始我的话:

(new MyThread()).start();

我没有在任何地方保留对它的引用,所以我想知道它是否是一种安全的方法 - GC不能收集它,因为它没有被引用?< / p>


如果不是(我想是的话),为什么呢?

1 个答案:

答案 0 :(得分:5)

如果查看OpenJDK Java 7 source code of Thread,您会注意到start()包含以下内容

group.add(this);

其中group是由{JVM管理的Thread&#39; s ThreadGroup。因此,当Thread仍在运行时,始终可以访问Thread。它不会被垃圾收集


如果单凭这一点并不令人信服,请考虑启动一个新线程意味着创建一个新的调用堆栈,其中根调用是native方法之一,可能是Thread } 方法。如果对象是垃圾收集的,则无法执行对象的方法。因此,{{1}}对象必须仍然存在。