Java Callable Future Example

Einer der Vorteile des Java Executor-Frameworks besteht darin, dass wir gleichzeitige Aufgaben ausführen können, die nach der Verarbeitung der Aufgaben möglicherweise ein einzelnes Ergebnis zurückgeben. Die Java Concurrency API erreicht dies mit den folgenden beiden Schnittstellen Callable und Future.

Java Aufrufbare und zukünftige Schnittstellen

1.1. Callable

Callable Schnittstelle hat die call() Methode. Bei dieser Methode müssen wir die Logik einer Aufgabe implementieren. Die Callable -Schnittstelle ist eine parametrisierte Schnittstelle, dh wir müssen den Datentyp angeben, den die call() -Methode zurückgibt.

2.2. Die

Future Schnittstelle verfügt über Methoden, um das von einem Callable Objekt generierte Ergebnis zu erhalten und seinen Status zu verwalten.

Java Callable Future Example

In diesem Beispiel erstellen wir ein FactorialCalculator vom Typ Callable . Dies bedeutet, dass wir die call() -Methode überschreiben und nach der Berechnung das Ergebnis der call() -Methode zurückgeben. Dieses Ergebnis kann später aus der Referenz Future des Hauptprogramms abgerufen werden.

Testen wir nun den obigen Fakultätsrechner mit zwei Threads und 4 Zahlen.

Programmausgabe.

Hier haben wir ein Callable -Objekt gesendet, das in einem Executor mit der submit() -Methode ausgeführt werden soll. Diese Methode empfängt ein Callable -Objekt als Parameter und gibt ein Future -Objekt zurück, das wir mit zwei Hauptzielen verwenden können –

  1. Wir können den Status der Aufgabe steuern – wir können die Aufgabe abbrechen und überprüfen, ob sie abgeschlossen ist. Zu diesem Zweck haben wir die Methode isDone() verwendet, um zu überprüfen, ob die Aufgaben abgeschlossen waren.
  2. Wir können das von der call() -Methode zurückgegebene Ergebnis erhalten. Zu diesem Zweck haben wir die Methode get() verwendet. Diese Methode wartet, bis das Callable -Objekt die Ausführung der call() -Methode beendet und sein Ergebnis zurückgegeben hat.

    Wenn der Thread unterbrochen wird, während die get() -Methode auf das Ergebnis wartet, wird eine InterruptedException -Ausnahme ausgelöst. Wenn die call() -Methode eine Ausnahme auslöst, löst diese Methode eine ExecutionException -Ausnahme aus.

Die Future Schnittstelle bietet eine andere Version der get() Methode, dh get(longtimeout,TimeUnitunit) . Diese Version der get-Methode wartet, wenn das Ergebnis der Aufgabe nicht verfügbar ist, die angegebene Zeit darauf. Wenn der angegebene Zeitraum verstrichen ist und das Ergebnis noch nicht verfügbar ist, gibt die Methode einen null -Wert zurück.

Viel Spaß beim Lernen!!

War dieser Beitrag hilfreich?

Lassen Sie uns wissen, ob Ihnen der Beitrag gefallen hat. Nur so können wir uns verbessern.
Ja
Nein