Maison > Java > javaDidacticiel > Résumé de plusieurs façons d'implémenter le multithreading en Java

Résumé de plusieurs façons d'implémenter le multithreading en Java

高洛峰
Libérer: 2017-01-05 16:52:06
original
1638 Les gens l'ont consulté

Regardons d'abord un exemple de code

import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;
 
public class Main {
 
  public static void main(String[] args) {
    //方法一:继承Thread
    int i = 0;
//    for(; i < 100; i++){
//      System.out.println(Thread.currentThread().getName() + " " + i);
//      if (i == 5) {
//        ThreadExtendsThread threadExtendsThread = new ThreadExtendsThread();
//        threadExtendsThread.start();
//      }
//    }
     
    //方法二:实现Runnable
//    for(i = 0; i < 100; i++){
//      System.out.println(Thread.currentThread().getName() + " " + i);
//      if (i == 5) {
//        Runnable runnable = new ThreadImplementsRunnable();
//        new Thread(runnable).start();
//        new Thread(runnable).start();
//      }
//    }
 
    //方法三:实现Callable接口
    Callable<Integer> callable = new ThreadImplementsCallable();
    FutureTask<Integer> futureTask = new FutureTask<>(callable);
    for(i = 0; i < 100; i++){
      System.out.println(Thread.currentThread().getName() + " " + i);
      if (i == 5) {
        new Thread(futureTask).start();
        new Thread(futureTask).start();
      }
    }
    try {
      System.out.println("futureTask ruturn: " + futureTask.get());
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
 
}
Copier après la connexion

Ensuite, discutons en détail de plusieurs façons d'implémenter le multi-threading en Java

Méthode 1, héritée de Thread

public class ThreadExtendsThread extends Thread {
  private int i;
  @Override
  public void run() {
    for(; i < 100; i++) {
      System.out.println(getName() + " " + i); 
    }
  }
}
Copier après la connexion

La méthode run est le corps d'exécution du thread et l'objet ThreadExtendsThread est l'objet thread.

Méthode 2, implémentez l'interface Runnable

public class ThreadImplementsRunnable implements Runnable {
  private int i;
  @Override
  public void run() {
    for(; i < 100; i++){
      System.out.println(Thread.currentThread().getName() + " " + i);
    }
  }
}
Copier après la connexion

La méthode run est le corps d'exécution du thread Lorsqu'elle est utilisée, un nouvel objet Thread est utilisé et l'objet Runnable est transmis au Thread. objet comme cible. Et le même objet Runnable peut être utilisé comme cible de plusieurs threads, et ces threads partagent tous les variables d'instance de l'objet Runnable.

Troisième méthode, implémenter l'interface Callable

import java.util.concurrent.Callable;
 
public class ThreadImplementsCallable implements Callable<Integer> {
  private int i;
   
  @Override
  public Integer call() throws Exception {
    for(; i < 100; i++){
      System.out.println(Thread.currentThread().getName() + " " + i);
    }
    return i;
  }
}
Copier après la connexion

L'interface Callable est similaire à l'interface Runnable, mais plus puissante que l'autre. Le corps d'exécution du thread est la méthode d'appel, qui a. une valeur de retour et peut lever des exceptions. Lorsqu'il est utilisé, enveloppez l'objet Callable dans un objet FutureTask et spécifiez le type de valeur de retour via des génériques. Vous pouvez appeler la méthode get de FutureTask ultérieurement pour récupérer le résultat de l'exécution.

Pour plus de méthodes Java pour implémenter le multi-threading, veuillez faire attention au site Web PHP chinois pour les articles connexes !


Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal