Comment terminer un fil de discussion sans utiliser stop()
L'utilisation de la méthode stop() pour terminer un fil de discussion peut conduire à un comportement imprévisible. Cet article présente une approche alternative à la terminaison du thread par interruption.
Alternative à stop()
Contrairement à stop(), l'interruption signale au thread de terminer son exécution en douceur. L'interruption est obtenue via la méthode Thread.interrupt(). Lorsqu'un thread est interrompu, il lèvera une InterruptedException.
Exemple d'implémentation
Considérez le code suivant :
public class HelloWorld { public static void main(String[] args) throws Exception { Thread thread = new Thread(new Runnable() { public void run() { try { while (!Thread.currentThread().isInterrupted()) { Thread.sleep(5000); System.out.println("Hello World!"); } } catch (InterruptedException e) { Thread.currentThread().interrupt(); } } }); thread.start(); System.out.println("press enter to quit"); System.in.read(); thread.interrupt(); } }
Dans cet exemple, le fil est créé et démarré comme d'habitude. Lorsque l'utilisateur appuie sur Entrée, le thread principal interrompt le thread de travail à l'aide de thread.interrupt(). Le thread de travail gère l'interruption en lançant une exception InterruptedException, puis en effaçant l'indicateur d'interruption. Étant donné que le thread vérifie l'interruption dans une boucle, il finira par terminer son exécution après avoir terminé l'itération en cours.
Considérations
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!