Heim  >  Artikel  >  Java  >  Zusammenfassung verschiedener Möglichkeiten zur Implementierung von Multithreading in Java

Zusammenfassung verschiedener Möglichkeiten zur Implementierung von Multithreading in Java

高洛峰
高洛峰Original
2017-01-05 16:52:061592Durchsuche

Sehen wir uns zunächst einen Beispielcode an

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();
    }
  }
 
}

Als nächstes besprechen wir im Detail verschiedene Möglichkeiten zur Implementierung von Multithreading in Java

Methode 1, geerbt von Thread

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

Die Ausführungsmethode ist der Thread-Ausführungskörper und das ThreadExtendsThread-Objekt ist das Thread-Objekt.

Methode 2, implementieren Sie die Runnable-Schnittstelle

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

Die Run-Methode ist der Thread-Ausführungskörper. Bei Verwendung wird ein Thread-Objekt verwendet und das Runnable-Objekt an den Thread übergeben Objekt als Ziel. Und dasselbe Runnable-Objekt kann als Ziel mehrerer Threads verwendet werden, und diese Threads teilen sich alle die Instanzvariablen des Runnable-Objekts.

Methode drei, implementieren Sie die Callable-Schnittstelle

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;
  }
}

Die Callable-Schnittstelle ähnelt der Runnable-Schnittstelle, ist jedoch leistungsfähiger als die andere. Der Thread-Ausführungskörper ist die Call-Methode einen Rückgabewert und kann Ausnahmen auslösen. Wenn es verwendet wird, binden Sie das Callable-Objekt in ein FutureTask-Objekt ein und geben Sie den Rückgabewerttyp über Generics an. Sie können die get-Methode von FutureTask später aufrufen, um das Ausführungsergebnis abzurufen.

Weitere Java-Methoden zur Implementierung von Multithreading finden Sie auf der chinesischen PHP-Website für verwandte Artikel!


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn