Maison  >  Article  >  Java  >  Différence entre Thread.start() et Thread.run() en Java

Différence entre Thread.start() et Thread.run() en Java

青灯夜游
青灯夜游original
2019-01-24 15:00:185938parcourir

Dans le concept multi-threading de Java, start() et run() sont les deux méthodes les plus importantes. Alors, quelle est la différence entre eux ? L'article suivant vous présentera les méthodes start() et run() et présentera les différences entre elles. J'espère qu'il vous sera utile.

Différence entre Thread.start() et Thread.run() en Java

La méthode start() en Java

La méthode start() de la classe thread peut être utilisé Démarrez un thread ; cette méthode appelle en interne la méthode run() de l'interface Runnable pour exécuter le code spécifié dans la méthode run() dans un thread séparé. [Recommandation du didacticiel vidéo : Tutoriel Java]

La méthode start() démarre le fil de discussion pour effectuer les tâches suivantes :

● Elle compte un nouveau fil de discussion

● Le thread passe de l'état New à l'état Runnable.

● Lorsqu'un thread a une chance de s'exécuter, sa méthode cible run() s'exécutera.

La méthode run() en Java

La méthode run() de la classe thread est une méthode abstraite de l'interface Runnable, contrôlée par la machine virtuelle Java S'il est appelé directement, aucun nouveau thread ne sera créé.

La différence entre la méthode start() et la méthode run()

Définition de la méthode

La méthode start() est définie dans la classe java.lang.Thread ; et la méthode run() est définie dans l'interface java.lang.Runnable et doit être réécrite dans la classe d'implémentation.

2. Création d'un nouveau thread

Lorsque le programme appelle la méthode start(), un nouveau thread sera créé puis la méthode run() sera exécutée. Mais si nous appelons directement la méthode run(), aucun nouveau thread ne sera créé, la méthode run() sera exécutée comme un appel de méthode régulier du thread appelant actuel lui-même, et aucun multithreading ne se produira.

Exemple :

class MyThread extends Thread { 
    public void run() 
    { 
System.out.println("\n"); 
        System.out.println("当前线程的名称: "
                           + Thread.currentThread().getName()); 
        System.out.println("run()方法调用"); 
    } 
} 
  
class demo { 
    public static void main(String[] args) 
    { 
        MyThread t = new MyThread(); 
        t.start(); 
    } 
}

Sortie :

Différence entre Thread.start() et Thread.run() en Java

Comme nous pouvons le voir dans l'exemple ci-dessus, lorsque nous appelons le fil de discussion Lors de l'appel la méthode start() d'une instance de classe, un nouveau thread sera créé avec le nom par défaut Thread-0, puis la méthode run() sera appelée et tout y sera exécuté. Sujet nouvellement créé.

Maintenant, essayons d'appeler la méthode run() directement au lieu de la méthode start() :

class MyThread extends Thread { 
    public void run() 
    { 
System.out.println("\n"); 
        System.out.println("当前线程的名称: "
                           + Thread.currentThread().getName()); 
  
        System.out.println("run()方法调用"); 
    } 
} 
  
class GeeksforGeeks { 
    public static void main(String[] args) 
    { 
        MyThread t = new MyThread(); 
        t.run(); 
    } 
}

Sortie :

Différence entre Thread.start() et Thread.run() en Java

Comme nous l'avons vu dans l'exemple ci-dessus, lorsque l'on appelle la méthode run() de la classe MyThread, aucun nouveau thread n'est créé et la méthode run() est exécutée sur le thread courant c'est à dire le thread principal. Par conséquent, aucun multithreading ne se produit. La méthode run() est appelée comme une fonction normale.

3. Appels multiples

La méthode start() ne peut pas être appelée plusieurs fois, sinon une java.lang.IllegalStateException sera levée cependant, la méthode run() ; La méthode peut être appelée plusieurs fois car il s’agit simplement d’un appel de méthode normal.

Ce qui précède représente l’intégralité du contenu de cet article, j’espère qu’il sera utile à l’étude de chacun. Pour un contenu plus passionnant, vous pouvez prêter attention aux colonnes de didacticiels pertinentes du site Web PHP chinois ! ! !

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