如果我保留对Runnable的引用,它运行的Thread何时被释放?

时间:2016-02-25 22:15:11

标签: java multithreading runnable

如果我有Runnable这样的话:

public class HelloRunnable implements Runnable {
    int helloCount = 0;
    public void run() {
        System.out.println("Hello from a thread!");
        helloCount++;
    }
}

还有另外一个类:

public class Test {
    public static void main(String args[]) {
        HelloRunnable hello = new HelloRunnable();
        (new Thread(hello)).start();
        // do some other stuff
        System.out.println("Numer of times I said Hello: " + hello.helloCount);
    }
}

据我了解,该线程在打印Hello后会停止执行并递增计数器(让我们假设它立即执行)。当我执行其他操作时,HelloRunnable的实例应该仍然存在,因为我有一个有效的指针。

但什么时候Thread对象(我通过Runnable的那个)被释放了?我可以创建这样的大量线程,维护我的Runnable对象(每个线程都有自己的Runnable),或者在Runnable对象存在时线程永远不会释放,我会用完线程或类似的东西?

1 个答案:

答案 0 :(得分:4)

Runnable对调用它的线程没有任何影响,因此它不会阻止线程被垃圾回收。 Runnable没有什么神奇之处,它或多或少只是一个如何为线程提供运行代码的约定。