Cette question a été posté sur le site. Je n'ai pas trouver les bonnes réponses, donc je suis le poster ici.
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
}
}
Ma requête n'est pas à propos de l'arrêt d'un Thread. Permettez-moi de reformuler ma question. La ligne A(voir code ci-dessus) démarre un nouveau Thread; et de la Ligne B de rendre le fil de référence null. Ainsi, la JVM dispose désormais d'un Objet Thread(qui est en cours d'exécution), à laquelle aucune référence n'existe (t=null dans la Ligne B). Donc ma question est, pourquoi est-ce fil(qui n'a pas de référence dans le thread principal) continue à fonctionner jusqu'à ce que le thread principal est en cours d'exécution. Par ma compréhension de l'objet thread doit avoir été nettoyée post Ligne B. j'ai essayé d'exécuter ce code pour 5 minutes et plus, en demandant d'Exécution Java pour exécuter GC, mais le fil ne vient pas de l'arrêter.
De l'espoir à la fois le code et la question est claire cette fois.