[开始之前我尝试搜索相关问题,因为我没有找到,所以我在这里问一个问题]
我正在学习 Java,下面的场景让我很头疼:
class MyThread extends Thread {
void run(){
//a heavy function
}
}
现在在主线程中,我将此线程调用为:
public static void main(...){
new MyThread().start();
System.gc(); //just a request..
//end of main thread too.
//Reference to that MyThread object is now zero.
}
我运行了那个代码。看来线程还活着。当所有线程退出时程序结束。
我的问题:
- 当引用计数为零时,线程是否有资格进行 GC?如果真的符合条件,那么垃圾回收的行为是什么?线程会被终止吗?
- 我知道这是一件坏事,但是没有
otherThread.join()
in 的定义是否明确main()
?
我对自己有一些解释(但我不知道我有多正确——我在这里发帖的原因):
- 只要线程处于活动状态,JVM 就会保持对线程的引用。所以参考计数永远不会真正为零。
- 执行函数有一个隐式
this
引用,所以引用计数再次不为零。
我在上述任何解释中是否正确?还是完全有其他解释?
谢谢并恭祝安康 :)