Maison >Java >javaDidacticiel >Runnable run() vs Thread start() : quelle est la différence clé ?

Runnable run() vs Thread start() : quelle est la différence clé ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-21 22:55:31202parcourir

Runnable run() vs. Thread start(): What's the Key Difference?

Runnable run() vs Thread start()

Question :

En simultané En programmation Java, l'interface Runnable définit une méthode run() qui est le point d'entrée d'une tâche. De même, la classe Thread possède une méthode start() qui lance un nouveau thread d’exécution. Quelle est la principale différence entre ces deux méthodes ?

Réponse :

La distinction fondamentale réside dans la création et l'exécution du thread :

Exécution exécutable () : Aucune création de thread

  • L'appel direct de Runnable.run() ne crée pas de nouveau thread.
  • Au lieu de cela, il exécute la méthode run() dans le thread d'exécution actuel.
  • Cette approche convient lorsque la tâche est légère et ne nécessite pas son propre thread dédié.
🎜>

Thread start() : Création de fil

  • L'appel de Thread.start() initie un nouveau thread d'exécution.
  • Dans le nouveau thread, la méthode run() de l'objet Runnable associé est exécutée.
  • L'utilisation de Thread.start() permet le parallélisme en divisant la tâche en tâches distinctes. threads qui s'exécutent simultanément.

Exemple :

Considérons deux classes, R1 et R2, implémentant l'interface Runnable :
class R1 implements Runnable {
    public void run() { ... }
}

class R2 implements Runnable {
    public void run() { ... }
}

Dans l'extrait de code suivant, r1.run() et r2.run() sont invoqués directement, ce qui signifie qu'aucun nouveau thread n'est créé :
public static void main() {
    R1 r1 = new R1();
    R2 r2 = new R2();

    r1.run();
    r2.run();
}

En revanche, le code suivant crée deux nouveaux threads, t1 et t2, et démarre eux :
public static void main() {
    R1 r1 = new R1();
    R2 r2 = new R2();
    Thread t1 = new Thread(r1);
    Thread t2 = new Thread(r2);

    t1.start();
    t2.start();
}

Dans ce code, les tâches associées à r1 et r2 seront exécutées simultanément au sein des threads nouvellement créés.

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