Maison >Java >javaDidacticiel >Pourquoi `Thread.start()` est-il essentiel pour un véritable multithreading en Java ?

Pourquoi `Thread.start()` est-il essentiel pour un véritable multithreading en Java ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-15 09:15:17353parcourir

Why is `Thread.start()` essential for true multithreading in Java?

Comprendre la distinction entre Thread.start() et Thread.run()

Lorsqu'ils travaillent avec le multithreading en Java, les programmeurs rencontrent deux clés méthodes : Thread.start() et Thread.run(). Bien que leurs noms puissent suggérer des fonctionnalités similaires, elles répondent à des objectifs nettement différents.

Que font ces méthodes ?

Thread.start() :

  • Initialise un nouveau thread et exécute la méthode run() dans un thread séparé de exécution.
  • Alloue les ressources système et configure l'environnement d'exécution du thread.
  • Le contrôle est transféré à la JVM pour gérer la planification et l'exécution des threads.

Thread.run() :

  • Invoque directement la méthode run() dans le fil de discussion.
  • Ne crée pas de nouveau fil de discussion ; à la place, il exécute le code dans le thread d'exécution actuel.
  • Aucune ressource système n'est allouée à la gestion des threads.

Pourquoi ne pouvons-nous pas simplement appeler Thread.run ()?

Si Thread.run() exécute également la méthode run(), pourquoi ne pouvons-nous pas simplement l'appeler à la place de Thread.start() ? La raison réside dans l'isolation et l'exécution indépendante fournies par le multithreading.

L'appel de Thread.run() exécute le code dans le thread actuel, et non dans un thread séparé. Cela signifie que tout code de la méthode run() interagit toujours avec et affecte les ressources du thread actuel. Ce n'est pas le but recherché du multithreading, qui permet l'exécution simultanée de tâches.

Exemple illustrant la différence :

Considérez le code suivant :

public class ThreadExample {
    public static void main(String[] args) {
        Thread t1 = new Thread(() -> System.out.println("Thread 1"));
        Thread t2 = new Thread(() -> System.out.println("Thread 2"));

        // Here, we call Thread.start() and Thread.run():
        t1.start();  // Starts Thread 1 in a separate thread
        t2.run();    // Executes Thread 2 in the current thread

        System.out.println("Main Thread");
    }
}

Sortie :

Thread 1
Main Thread

Appel Thread.start() sur t1 crée un nouveau thread et exécute la méthode run() dans ce thread, lui permettant d'imprimer "Thread 1". D'un autre côté, appeler Thread.run() sur t2 exécute la méthode run() dans le thread actuel (c'est-à-dire principal), en contournant la création d'un nouveau thread. Cela a pour conséquence que le "Thread 2" n'est pas imprimé, car il n'est jamais exécuté dans un thread séparé.

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