Was ist der Vorteil der Verwendung von FutureTask über Callable?

10

Es gibt zwei Ansätze zum Senden und Abfragen von Tasks für Ergebnisse

%Vor%
  1. Verwenden Sie die Kombination von Callable und Future und senden Sie sie an ExecutorService . Abrufen des Ergebnisses mit future.get() .

    %Vor%
  2. Verwenden Sie FutureTask . Dies wird Callable umbrechen und dann das Ergebnis mit FutureTask abrufen.

    %Vor%

Was ist der Vorteil der Verwendung von FutureTask über Callable + zukünftige Kombination?

    
Amrish Pandey 22.06.2015, 09:53
quelle

2 Antworten

6

Fast gar keine. Ein kurzer Blick auf GrepCode von AbstractExecutorService zeigt an, dass jede dieser Methoden einfache Hilfsmethoden sind, die die Callable / Runnable in eine Future für dich schlüpfen.

%Vor%     
OldCurmudgeon 22.06.2015 10:38
quelle
4

Mit Future können wir den Status der Callable-Task ermitteln und das zurückgegebene Objekt abrufen. Sie stellt die get () -Methode bereit, die auf das Beenden des Callable warten und das Ergebnis zurückgeben kann.

Future stellt die cancel () -Methode zum Abbrechen der zugehörigen Callable-Task bereit. Es gibt eine überladene Version der get () -Methode, in der wir die Zeit angeben können, in der auf das Ergebnis gewartet wird. Es ist nützlich zu vermeiden, dass der aktuelle Thread für längere Zeit blockiert wird. Es gibt isDone () - und isCancelled () -Methoden, um den aktuellen Status der zugeordneten Callable-Task herauszufinden.

Hier ist ein einfaches Beispiel für die Callable-Task, die den Namen des Threads zurückgibt, der die Task nach einer Sekunde ausführt. Wir verwenden das Executor-Framework, um 100 Tasks parallel auszuführen, und verwenden Future, um das Ergebnis der übertragenen Tasks zu erhalten.

%Vor%

Wo FutureTask als Basis konkrete Implementierung der Future-Schnittstelle ist und asynchrone Verarbeitung bereitstellt. Es enthält die Methoden zum Starten und Abbrechen einer Aufgabe sowie Methoden, die den Status der FutureTask als abgeschlossen oder abgebrochen zurückgeben können. Wir benötigen ein aufrufbares Objekt, um eine zukünftige Aufgabe zu erstellen, und dann können wir den Java Thread Pool Executor verwenden, um diese asynchron zu verarbeiten.

Sehen wir uns das Beispiel von FutureTask mit einem einfachen Programm an.

Da FutureTask ein aufrufbares Objekt benötigt, werden wir eine einfache Callable-Implementierung erstellen.

%Vor%     
Mudassar 22.06.2015 10:39
quelle