Maison >Java >javaDidacticiel >Pourquoi Thread.start() est-il préféré à Thread.run() pour l'exécution de threads en Java ?

Pourquoi Thread.start() est-il préféré à Thread.run() pour l'exécution de threads en Java ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-18 04:04:02464parcourir

Why is Thread.start() preferred over Thread.run() for thread execution in Java?

Implémentation de Thread en Java : comparaison de Thread.start() et Thread.run()

En Java, un aspect fondamental de la concurrence est la création et l'exécution de threads. Comprendre la distinction entre Thread.start() et Thread.run() est crucial dans ce contexte.

Thread.start() est la méthode responsable du lancement d'un nouveau thread d'exécution. Lorsqu'il est invoqué, il configure la pile du thread, définit son état initial sur exécutable et planifie son exécution par la machine virtuelle Java (JVM). En revanche, Thread.run() exécute directement le code de la méthode run() sur le thread appelant, sans en créer un nouveau.

Pourquoi utiliser Thread.start() ?

L'emploi de Thread.start() sur Thread.run() est essentiel car :

  • Multi-threading : Thread.start() crée un nouveau thread, permettant l'exécution simultanée du code.
  • Contrôle du cycle de vie : Start() initialise le cycle de vie du thread, permettant une gestion appropriée des threads, comme le démarrage, l'interruption , et rejoindre.

Invocation directe de Thread.run()

Pendant qu'il peut sembler pratique d'appeler Thread.run(), cette approche doit être évitée pour les raisons suivantes :

  • Single-Threading : L'exécution de run() exécute directement le code dans le même thread, annulant les avantages du multi-threading.
  • Pas de gestion des threads : Sans appeler start(), il n'y a pas de thread approprié gestion et synchronisation.

Exemple

Considérez le code suivant :

public class ThreadExample {
    public static void main(String[] args) {
        Runnable task = () -> System.out.println("This is a new thread!");
        Thread thread = new Thread(task);

        // Direct invocation of run() - no multi-threading occurs.
        // thread.run();

        // Correct multi-threading using start().
        thread.start();
    }
}

Lorsque vous commentez l'invocation directe de Thread.run (), la sortie montrera qu'un nouveau thread a été créé et exécuté, tandis que l'exécution directe de run() exécutera le code dans le thread principal, produisant une sortie sans multi-threading.

Conclusion

En Java, appeler Thread.start() est l'approche privilégiée pour créer et exécuter des threads. Thread.run(), en revanche, ne doit pas être utilisé directement car cela entrave les capacités de multi-threading et de gestion des threads.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn