Maison  >  Article  >  Java  >  Explication détaillée de la différence entre Thread et Runnable dans le multithreading Java

Explication détaillée de la différence entre Thread et Runnable dans le multithreading Java

黄舟
黄舟original
2017-08-20 09:17:472015parcourir

Cet article présente principalement des informations pertinentes sur la différence entre les threads multithread Java et les exécutables. Il existe deux façons pour les threads Java d'hériter de la classe thread et d'implémenter l'interface exécutable. Des exemples sont fournis ci-dessous pour aider tout le monde à comprendre. le besoin peut s'y référer

La différence entre Java multi-thread Thread et runnable

Il existe deux façons d'implémenter le multi-threading en Java : hériter de la classe Thread et implémenter l'interface exécutable

1. Hériter de la classe Thread et remplacer la méthode run() de la classe parent


  public class thread1 extends Thread {
 
    public void run() {
        for (int i = 0; i < 10000; i++) {
            System.out.println("我是线程"+this.getId());
        }
    }
 
    public static void main(String[] args) {
        thread1 th1 = new thread1();
        thread1 th2 = new thread1();
        th1.run();
        th2.run();
    }
   }

La méthode run() est tout simplement ordinaire. Les méthodes sont exécutées séquentiellement, c'est-à-dire que th2.run() n'est exécutée qu'une fois th1.run() terminée, donc un seul thread principal est utilisé pour l'écriture. Le multithreading n'a aucun sens, donc la méthode start() doit être utilisée pour démarrer le thread. La méthode start() appellera automatiquement la méthode run(). Le code ci-dessus est remplacé par :


 public class thread1 extends Thread {
    
    public void run() {
        for (int i = 0; i < 10000; i++) {
            System.out.println("我是线程"+this.getId());
        }
    }
 
    public static void main(String[] args) {
        thread1 th1 = new thread1();
        thread1 th2 = new thread1();
        th1.start();
        th2.start();
    }
}

Démarrez un nouveau fil de discussion via la méthode start(). De cette façon, que la méthode run() appelée par th1.start() ait été exécutée ou non, th2.start() continuera à être exécutée s'il y a un autre code ci-dessous, il n'est pas nécessaire d'attendre th2. start() pour terminer l’exécution et poursuivre l’exécution. (Les ID de thread de sortie sont générés de manière aléatoire en alternance)

2, implémentez l'interface exécutable


public class thread2 implements Runnable {
 
    public String ThreadName;
    
    public thread2(String tName){
        ThreadName = tName;
    }
    
    
    public void run() {
        for (int i = 0; i < 10000; i++) {
            System.out.println(ThreadName);
        }
    }
    
    public static void main(String[] args) {
        thread2 th1 = new thread2("线程A");
        thread2 th2 = new thread2("Thread-B");
        th1.run();
        th2.run();
    }
}

Comme la méthode run de Thread, l'exécution de Runnable n'est qu'une méthode normale, th2.run() doit attendre la fin de th1.run() avant de pouvoir être exécuté. À des fins multithread, vous devez également utiliser la méthode start() de Thread (runnable n'a pas de méthode start). Le code ci-dessus est modifié comme suit :


public class thread2 implements Runnable {
 
    public String ThreadName;
    
    public thread2(String tName){
        ThreadName = tName;
    }
    
    
    public void run() {
        for (int i = 0; i < 10000; i++) {
            System.out.println(ThreadName);
        }
    }
    
    public static void main(String[] args) {
        thread2 th1 = new thread2("线程A");
        thread2 th2 = new thread2("Thread-B");
        Thread myth1 = new Thread(th1);
        Thread myth2 = new Thread(th2);
        myth1.start();
        myth2.start();
    }
}

Résumé : Il existe deux façons d'implémenter le multi-threading Java. interface et thread est une classe. , runnable ne fournit qu'une seule méthode d'exécution. Il est recommandé d'utiliser runable pour implémenter le multi-threading Java. Quoi qu'il en soit, vous devrez éventuellement utiliser thread.start() pour rendre le thread exécutable. État.

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