Esta pregunta se publicó en algún sitio. No encontré las respuestas correctas allí, así que lo vuelvo a publicar aquí.Java Thread Basura recolectada o no
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
}
}
Mi consulta no es sobre stopping a Thread. Permítame rehacer mi pregunta. La línea A (consulte el código anterior) inicia un nuevo subproceso; y la línea B hace que la referencia del hilo sea nula. Entonces, la JVM ahora tiene un objeto de subproceso (que está en estado de ejecución) para el que no existe referencia (como t = nulo en la línea B). Entonces mi pregunta es, ¿por qué este hilo (que ya no tiene referencia en el hilo principal) sigue ejecutándose hasta que se ejecuta el hilo principal? Según entiendo, el objeto thread debería haber sido recogido basura después de la línea B. Intenté ejecutar este código durante 5 minutos y más, solicitando a Java Runtime que ejecute GC, pero el hilo simplemente no se detiene.
Espero que el código y la pregunta estén claros esta vez.
Esta respuesta, tal como está actualmente, plantea la pregunta si los hilos pueden ser sometidos a GC (después de que terminen). Dado que esta pregunta está marcada como un duplicado de [este] (http://stackoverflow.com/questions/10380327/java-threads-and-garbage-collector), se debe mencionar que los hilos ya no estarán marcados como " raíces de recolección de basura "después de que terminan, y por lo tanto, se vuelven alcanzables para GC. – bluenote10
@ bluenote10 correcto, de ahí la frase "hilo de ejecución". – falstro
La última oración es penetrante: "¿por qué tu hilo principal no es basura?". – Determinant