Sobes.tech
Junior

Was ist der Unterschied zwischen den Schnittstellen Callable und Runnable?

sobes.tech KI

Antwort von AI

Runnable - ist eine funktionale Schnittstelle, die eine Aufgabe darstellt, die von einem Thread ausgeführt werden kann. Sie hat eine Methode run(), die keine Argumente akzeptiert1 und keinen Wert zurückgibt. Wird verwendet, um Hintergrundoperationen auszuführen, die kein Ergebnis erfordern.

Callable - ist eine parametrisierte Schnittstelle, die ebenfalls eine Aufgabe darstellt, die von einem Thread ausgeführt werden kann. Sie hat eine Methode call(), die einen generischen Typ <V> (beliebigen Wert)2 zurückgibt und eine Ausnahme (Exception) werfen kann. Geeignet für Aufgaben, bei denen das Ergebnis verwendet werden muss.

Hauptunterschiede:

Merkmal Runnable Callable
Rückgabewert Nein Ja (Typ {@code <V>})
Ausnahmen Nein (Methode {@code run}) Ja (Methode {@code call})
Methode {@code void run()} {@code V call() throws Exception}
Verwendung {@code java.lang.Runnable} {@code java.util.concurrent.Callable}

Beispiel für die Verwendung von Runnable:

// Implementierung von Runnable:
Runnable task = new Runnable() {
    @Override
    public void run() {
        // Führt eine Operation ohne Rückgabe durch
        System.out.println("Runnable task executed");
    }
};

// In einem Thread starten:
new Thread(task).start();

Beispiel für die Verwendung von Callable:

// Implementierung von Callable:
Callable<String> task = new Callable<String>() {
    @Override
    public String call() throws Exception {
        // Führt eine Operation aus und gibt ein Ergebnis zurück:
        return "Callable task executed with result";
    }
};

// Mit ExecutorService ausführen:
ExecutorService executor = Executors.newSingleThreadExecutor();
Future<String> future = executor.submit(task);

try {
    // Ergebnis abrufen:
    String result = future.get();
    System.out.println(result);
} catch (InterruptedException | ExecutionException e) {
    e.printStackTrace();
} finally {
    executor.shutdown();
}