Comprendre la distinction entre Thread.start() et Thread.run()
Lorsque vous travaillez avec des threads en Java, il est crucial de comprendre les rôles des méthodes start() et run(). Ils jouent des fonctions distinctes dans la gestion du cycle de vie d'un thread.
Thread.start() vs Thread.run()
La méthode Thread.start() initialise un nouveau thread avec le code défini dans la méthode run(). Lors de son appel, il crée un thread d'exécution distinct et exécute la méthode run() en même temps que le thread qui a appelé start().
En revanche, Thread.run() exécute directement le code dans run() méthode dans le fil de discussion actuel. Il ne crée pas de nouveau thread, ce qui signifie que le code s'exécutera séquentiellement avec le thread appelant.
Exemple démontrant la différence
Pour illustrer la différence entre les deux méthodes , considérez ce qui suit exemple :
class MyThread extends Thread { @Override public void run() { for (int i = 0; i < 10; i++) { System.out.println("Thread " + this.getName() + ": " + i); } } } public class Main { public static void main(String[] args) { MyThread thread1 = new MyThread(); // Calling Thread.start() thread1.start(); // Calling Thread.run() directly thread1.run(); } }
Sortie :
Thread Thread-0: 0 Thread Thread-0: 1 Thread Thread-1: 0 Thread Thread-1: 1 Thread Thread-1: 2 Thread Thread-1: 3 Thread Thread-1: 4 Thread Thread-1: 5 Thread Thread-1: 6 Thread Thread-1: 7 Thread Thread-1: 8 Thread Thread-1: 9
Dans cet exemple, l'appel de start() crée un nouveau thread (Thread-0) qui exécute l'exécution ( ) en même temps que le thread principal. Par conséquent, la sortie entrelace les messages des deux threads.
Cependant, appeler directement run() ne crée pas de nouveau thread. Au lieu de cela, il exécute la méthode run() dans le thread principal (Thread-1). En conséquence, les messages de la méthode run() sont imprimés séquentiellement après l'appel start().
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!