目前我正在学习java中的线程。我想知道当线程的run()返回时会发生什么(这意味着线程已经死了)?例如:
public class ThreadA extends Thread {
private Thread threadB = new ThreadB();
...
@Override
public void run() {
threadB.start(); //It will take a while to finishes
}
}
...
ThreadA threadA = new ThreadA();
threadA.start()
threadA和threadB会发生什么?他们会被垃圾收集吗?如果是,如何以及何时?
答案 0 :(得分:1)
当您在A中开始新线程时,它将一直存在直到停止。然后它将被垃圾收集。当你启动它时,它被JVM线程管理器引用,因此,将在GC之前完全完成。
在oracle documentation你可以举一个例子:
The following code would then create a thread and start it running:
PrimeRun p = new PrimeRun(143);
new Thread(p).start();
如您所见,您无需保持对运行线程的引用。
您也可以使用finalize()
方法测试此类问题。当它的对象被收集时,它将被调用。