【发布时间】:2012-07-16 07:21:23
【问题描述】:
[在我开始之前我尝试搜索相关问题,因为我没有找到,所以我在这里问一个问题]
我正在学习 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?如果真的符合条件,那么垃圾回收的行为是什么?线程会被终止吗?
- 我知道这是一件坏事,但在
main()中没有otherThread.join()是否定义明确?
我对自己有一些解释(但我不知道我有多正确——我在这里发帖的原因):
- 只要线程活动,JVM 就会维护对线程的引用。所以引用计数永远不会是零。
- 正在执行的函数有一个隐式的
this引用,所以引用计数又不是零。
我在上述任何解释中是否正确?还是完全有其他解释?
感谢和问候:)
【问题讨论】:
标签: java multithreading garbage-collection reference-counting