如果我保留对 Runnable 的引用,它 运行 上的线程什么时候被释放?
If I keep a reference to a Runnable, when does the Thread it ran on get released?
如果我有这样的Runnable
:
public class HelloRunnable implements Runnable {
int helloCount = 0;
public void run() {
System.out.println("Hello from a thread!");
helloCount++;
}
}
还有一个 class 这样的:
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 对象存在时线程永远不会被释放,我会 运行 out of threads 或类似的东西?
Runnable 与调用它的线程无关,因此它不会阻止线程被垃圾收集。 Runnable 没有什么神奇之处,它或多或少只是一种约定,如何为线程提供 运行.
的代码。
如果我有这样的Runnable
:
public class HelloRunnable implements Runnable {
int helloCount = 0;
public void run() {
System.out.println("Hello from a thread!");
helloCount++;
}
}
还有一个 class 这样的:
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 对象存在时线程永远不会被释放,我会 运行 out of threads 或类似的东西?
Runnable 与调用它的线程无关,因此它不会阻止线程被垃圾收集。 Runnable 没有什么神奇之处,它或多或少只是一种约定,如何为线程提供 运行.
的代码。