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