Runnable VS Callable Interface in Java

Mohammad Irfan 12 Oktober 2023
  1. Die Runnable-Schnittstelle in Java
  2. Das Runnable-Schnittstellenbeispiel in Java
  3. Die Callable Schnittstelle in Java
  4. Das Callable-Schnittstellenbeispiel in Java
  5. Runnable VS Callable-Schnittstelle in Java
Runnable VS Callable Interface in Java

Dieses Tutorial stellt den Unterschied zwischen Runnable- und Callable-Schnittstellen mit Beispielen in Java vor.

Die Runnable-Schnittstelle in Java

Runnable ist eine Schnittstelle, die zum Erstellen und Ausführen von Threads in Java verwendet wird. Es hat nur eine einzige abstrakte Methode run() und wird auch als Functional Schnittstelle bezeichnet.

Unten sehen Sie die Signatur der Runnable-Schnittstelle und ihrer SAM-Methode.

@FunctionalInterface public interface Runnable
void run() // Single Abstract Method

Das Runnable-Schnittstellenbeispiel in Java

Jede Klasse, die einen Thread erstellen und ausführen möchte, muss entweder ein Runnable-Interface implementieren oder die Thread-Klasse erweitern.

Das Runnable-Interface stellt eine run()-Methode zur Verfügung, die in der Basisklasse überschrieben werden muss. Diese Methode wird implizit von der Methode start() ausgeführt. Siehe das Beispiel unten.

public class SimpleTesting implements Runnable {
  public static void main(String[] args) {
    new Thread(new SimpleTesting()).start();
  }
  @Override
  public void run() {
    System.out.println("Running a thread");
  }
}

Ausgabe:

Running a thread

Die Callable Schnittstelle in Java

Das Callable ist eine Schnittstelle und ähnelt der Runnable-Schnittstelle. Es enthält auch eine einzige abstrakte Methode, call().

Diese Schnittstelle ist für Klassen konzipiert, deren Instanzen möglicherweise von einem anderen Thread ausgeführt werden. Die Signatur der Callable-Schnittstelle und -Methode ist unten:

Die Klasse Executors enthält Hilfsmethoden zur Konvertierung in Callable-Klassen von anderen gängigen Formen.

@FunctionalInterface public interface Callable<V>
V call() throws Exception

Das Callable-Schnittstellenbeispiel in Java

Wir haben die Callable-Schnittstelle implementiert und ihre call()-Methode überschrieben. Wir können jedes Objekt zur Methode call() bringen.

Siehe das Beispiel unten.

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

public class SimpleTesting implements Callable<Integer> {
  public static void main(String[] args) throws InterruptedException, ExecutionException {
    ExecutorService executorService = Executors.newSingleThreadExecutor();
    SimpleTesting st = new SimpleTesting();
    Future<Integer> future = executorService.submit(st);
    int result = future.get().intValue();
    System.out.println("product " + result);
  }

  @Override
  public Integer call() throws Exception {
    int product = 23 * 12;
    return product;
  }
}

Ausgabe:

product 276

Runnable VS Callable-Schnittstelle in Java

Die folgende Tabelle enthält einige Punkte zum Verständnis der Java-Schnittstelle Runnable und Callable.

Runnable Callable
Die implementierende Klasse muss ihre Methode run() entsprechend überschreiben. Die implementierende Klasse muss ihre Methode call() entsprechend überschreiben.
Der Rückgabetyp der Methode run() ist void und gibt daher nichts an den Aufrufer zurück. Der Rückgabetyp der Methode call() ist ein Objekt. Es kann ein String, eine ganze Zahl usw. sein.
Die Methode run() wirft keine Ausnahme. Die Methode call() kann während der Ausführung eine Ausnahme auslösen.
Es kann verwendet werden, um Threads in Java zu erstellen. Es kann nicht zum Erstellen von Threads verwendet werden.