线程的run()返回后会发生什么?

时间:2013-12-12 01:35:11

标签: java multithreading

目前我正在学习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会发生什么?他们会被垃圾收集吗?如果是,如何以及何时?

1 个答案:

答案 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()方法测试此类问题。当它的对象被收集时,它将被调用。