La différence entre la méthode de démarrage et la méthode d'exécution dans le thread
Dans un thread, si la méthode de démarrage appelle la méthode d'exécution à son tour, pourquoi choisissons-nous d'appeler la méthode de démarrage? Ou quelle est la différence entre appeler la méthode de démarrage et la méthode d'exécution dans un thread Java? Ces deux questions sont deux questions d'interview multi-threades très populaires au niveau débutant. Lorsqu'un programmeur Java commence à apprendre des threads, il apprendra d'abord à hériter de la classe de threads, à surcharger la méthode d'exécution ou à implémenter l'interface Runnable, à implémenter la méthode d'exécution, puis à appeler la méthode de démarrage de l'instance de thread. Mais après avoir eu une certaine expérience, il constatera que la méthode de démarrage appellera la méthode de course en interne en examinant la documentation de l'API ou d'autres façons, mais beaucoup d'entre nous savent que lorsque l'on nous demande pendant l'entretien, nous réaliserons l'importance de cette question. Dans ce didacticiel Java, nous comprendrons la différence entre l'appel de la méthode de démarrage et la méthode d'exécution lors du démarrage des threads en Java
Cet article est un post-scriptum de certains de nos articles publiés sur Java Multithreading, la différence entre Runnable et Thread en Java et comment résoudre le problème des consommateurs producteurs en Java en utilisant BlockingQueue. Si vous ne les avez pas encore lus, vous les trouverez peut-être intéressants et utiles.
La différence entre le début et l'exécution dans le fil Java
La principale différence entre les méthodes de démarrage et d'exécution est que lorsque le programme appelle la méthode de démarrage, un nouveau thread sera créé et le code de la méthode d'exécution s'exécutera sur le nouveau thread. Cependant, lorsque vous appelez directement la méthode d'exécution, le programme ne créera pas un nouveau thread et le code à l'intérieur de la méthode d'exécution s'exécutera sur le thread actuel. Dans la plupart des cas, appeler la méthode d'exécution est un bug ou une erreur. Étant donné que l'intention d'origine de l'appelant est d'appeler la méthode de démarrage pour démarrer un nouveau thread, cette erreur peut être détectée par de nombreux outils de couverture de code statique, tels que Fingbugs. Si vous souhaitez exécuter une tâche qui prend beaucoup de temps, il est préférable d'utiliser la méthode de démarrage, sinon votre fil principal sera bloqué lorsque vous appelez la méthode d'exécution. Une autre différence est qu'une fois un thread démarré, vous ne pouvez pas appeler à plusieurs reprises la méthode de démarrage de l'objet de thread. L'appel de la méthode de démarrage du fil qui a déjà démarré rapportera une exception illégalStateException, mais vous pouvez appeler à plusieurs reprises la méthode d'exécution
Ce qui suit est la démo de la méthode de démarrage et de la méthode d'exécution
La tâche dans le thread est d'imprimer le nom du thread actuel passé dans la valeur de la chaîne.
Ici, nous pouvons clairement voir la différence entre les deux
classe publique diffbewTeenStartAndrun {public static void main (String args []) {System.out.println (Thread.currentThread (). getName ()); // Création de deux threads pour démarrer et exécuter le thread d'appel de méthode startThread = new thread (new tâche ("start")); Thread runthread = new thread (new tâche ("run")); startThread.start (); // CALLAGE START Méthode de Thread - Exécutera dans // nouveau Thread Runthread.Run (); // CALLAGE RUNE Méthode de thread - Exécutera dans // Thread actuel} / * * Implémentation Runnable Simple * / La tâche de classe statique privée implémente Runnable {Private String Appeler; tâche publique (String Appeler) {this.Caller = appelant; } @Override public void run () {System.out.println ("appelant:" + appelant + "et le code sur ce thread est exécuté par:" + thread.currentThread (). GetName ()); }}}Merci d'avoir lu, j'espère que cela peut vous aider. Merci pour votre soutien à ce site!