Différence entre la méthode Start et Run dans les threads en Java

Pour démarrer un thread en Java, on appelle la méthode start() de la classe java.lang.Thread, mais si vous en apprenez plus, vous découvrirez que la méthode start() appelle en interne la méthode run() de l’interface Runnable pour exécuter le code spécifié dans la méthode. Maintenant, la question se pose: pourquoi nous ne pouvons pas simplement appeler la méthode run() au lieu d’appeler la méthode start()? Puisque start() appelle quand même run(), Si nous appelons directement run, est-ce que ça devrait avoir le même effet que d’appeler start?
 
 
Lorsque vous appelez directement la méthode run(), le code de la méthode run() est exécuté dans le même thread qui appelle la méthode run. JVM ne créera pas de nouveau thread jusqu’à ce que vous appeliez la méthode start().
 
En revanche, lorsque vous appelez la méthode Thread.start(), le code dans la méthode run() est exécuté sur un nouveau thread, qui est en fait créé par la méthode start().
 
Une autre différence à retenir entre les méthodes start et run est que vous pouvez appeler la méthode run() plusieurs fois. JVM ne renvoie aucune erreur, mais vous ne pouvez pas appeler la méthode start() sur la même instance de thread.
Multithreading en Java

public class MaClasse extends Thread
{
  public void run()           
  {
    System.out.println("Etat du thread: " + this.isAlive());
  }      
  public static void main(String args[])
  {
     MaClasse th = new MaClasse();
     th.start();
  }
}

La sortie :

Etat du thread: true

 
 
Code anormal appelant la méthode run() sur un thread

public class MaClasse extends Thread
{
  public void run()           
  {
    System.out.println("Etat du thread: " + this.isAlive());
  }      
  public static void main(String args[])
  {
     MaClasse th = new MaClasse();
     th.run();
  }
}

La sortie :

Etat du thread: false

 
Avec la méthode start(), la méthode thread isAlive() renvoie true et avec la méthode run(), la méthode isAlive() renvoie false. Qu’est-ce que cela indique? dans les deux cas, thread est créé et run() est appelé. Avec le cas de start(), la machine virtuelle Java (JVM) appelle de manière implicite la méthode run(), le thread th étant exécuté. Pour cela, isAlive() retourne true. Si start() est appelé, la machine virtuelle Java (JVM) garde le cycle de vie du thread et effectue de nombreuses activités sur le thread qui est éligible.
 
En appelant directement la méthode run() en tant que th.run(), dans le deuxiéme cas, cela équivaut simplement à un appel de méthode normal. Dans th.run(), th est supposé, par la JVM, en tant qu’objet de la classe « MaClasse » mais pas en tant que thread de la classe « MaClasse ». En d’autres termes, run() n’est ni appelé ni exécuté par un thread. Pour cette raison, isAlive() a renvoyé la valeur false.
 
Utilisez donc toujours start() et non run().
Différence entre l’interface Runnable et la classe Thread en java

Conclusion

La seule différence entre la méthode start() et run() dans les Threads est que la méthode start crée un nouveau thread alors que run ne crée aucun thread et s’exécute simplement dans le thread actuel comme un appel de méthode normal.
 

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *