这个问题被张贴在一些网站。 我没有找到正确的答案,所以我在这里再次发布它。
public class TestThread {
public static void main(String[] s) {
// anonymous class extends Thread
Thread t = new Thread() {
public void run() {
// infinite loop
while (true) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
// as long as this line printed out, you know it is alive.
System.out.println("thread is running...");
}
}
};
t.start(); // Line A
t = null; // Line B
// no more references for Thread t
// another infinite loop
while (true) {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
}
System.gc();
System.out.println("Executed System.gc()");
} // The program will run forever until you use ^C to stop it
}
}
我的查询是不是停止线程。 让我重复我的问题。 A线(见上面的代码)开始一个新的线程; 和B线使线程参考空。 所以,现在JVM具有螺纹对象(其是处于运行状态),以其中不存在参考(如叔在线B = NULL)。 所以我的问题是,为什么这个线程(有没有参考了在主线程)继续运行,直到主线程运行。 按我的理解,线程对象应该是垃圾回收后线B.我想5分钟多,要求的Java Runtime运行GC运行这段代码,但线程只是不会停止。
希望双方的代码,问题很清楚这个时候。