一个尚未启动的新线程对象将被垃圾收集?

时间:2015-11-13 11:09:47

标签: java multithreading garbage-collection

我有来自Java虚拟机的源代码。这个VM只收集满足这些条件(两个条件)的垃圾收集线程:

  • 线程已完成(已启动已完成
  • 线程对象没有任何引用

我认为应该用没有反抗来垃圾收集未启动的主题。但是这些线程被保存在VM内存中。这是对的吗?

示例代码:

public class Test implements Runnable{

    private Thread thread;
    public Test() {
        thread = new Thread(this);
    }    

    @Override
    public void run() {
        //This thread never runs...
        //My question is about garbage collector in a situation like this...
    }    
}

考虑到:

  • 测试对象不再有参考
  • 测试对象线程从未启动

测试线程会被垃圾回收吗?

1 个答案:

答案 0 :(得分:1)

ThreadRunnable类的实例就像任何其他类的实例。所以,是的,如果引用超出范围,它将被GCed。

注意:您首先必须创建Test的实例。

正在运行的线程充当GC的root用户,不会进行GCed。它的启动线程(通过调用实际创建执行线程start()并使其变得特殊。