was ist der Vorteil der Verwendung von FutureTask mehr Aufrufbar?
Gibt es zwei Ansätze für die übermittlung und der Abruf der Aufgabe zum Ergebnis
FutureTask futureTask = new FutureTask<String>(callable);
-
Verwendung der Kombination von
Callable
undFuture
und reichen aufExecutorService
. Abrufen Ergebnis mitfuture.get()
.Future future = service.submit(callable);
-
Verwenden
FutureTask
. Dieser wrapCallable
und dann abrufen Ergebnis mitFutureTask
.service.execute(task);
Was ist der Vorteil der Verwendung FutureTask
über Callable
+ Zukunft Kombination ?
- Der implementiert die FutureTask die Zukünftige Schnittstelle, also, was genau ist der Unterschied zwischen den Ansätzen konkret? (d.h. zeigen Sie ein Beispiel)
- FutureTask task = new FutureTask<Zeichenfolge>(callable); //Umsetzung 1 Zukunft fut = service.submit(callable); //Implementierung 2. service.execute(task); warum sollten wir uns lieber Implementierung 1 Implementierung 2. Gibt es einen Vorteil ?
- Nicht veröffentlichen Sie Ihren code in den Kommentaren, aktualisieren Sie die Antwort.
- Vorteil? DougSchmidt und brianGoetz reden
Memoizer
Klasse(Abschnitt 5.6 - JCIP) mitFutureTask
. DougSchmidt sagt, briangoetz version vonMemoizer
Klasse hat einige Fehler, die in dieser Präsentation. Werfen Sie einen Blick. - Warum Memoizer? Eine caching-Technik
Du musst angemeldet sein, um einen Kommentar abzugeben.
Fast sicher, gar keine. Ein schnelles durchsuchen auf GrepCode der
AbstractExecutorService
zeigt alle diese Methoden sind einfach-helper-Methoden, die letztlich wickeln Sie dieCallable
/Runnable
imFuture
für Sie.Mit Zukunft können wir herausfinden, den status der Callable Aufgabe und erhalten Sie das zurückgegebene Objekt. Es liefert get () - Methode, die warten kann, bis das Callable zu beenden und dann das Ergebnis zurückgeben.
Zukunft bietet cancel () - Methode zum Abbrechen der damit verbundenen Callable task). Es ist eine überladene version von get () - Methode, wo wir angeben können, die Zeit auf das Ergebnis warten, es ist sinnvoll, zu vermeiden, aktuellen thread blockiert für längere Zeit. Es gibt isDone() und isCancelled() Methoden, um herauszufinden, den aktuellen status der zugeordneten Callable task.
Hier ist ein einfaches Beispiel des Callable task liefert den Namen des thread ausführen der Aufgabe nach einer Sekunde. Wir sind mit Executor-framework zum ausführen 100 Aufgaben parallel und Zukunft verwenden, um das Ergebnis der eingereichten Aufgaben.
Wo, wie FutureTask ist die Basis konkrete Umsetzung der Zukünftigen Benutzeroberfläche und bietet die asynchrone Verarbeitung. Es enthält die Methoden zum starten und Abbrechen einer Aufgabe und auch die Methoden, die zurückkehren kann, den Zustand der FutureTask als ob es abgeschlossen oder abgebrochen. Wir brauchen ein callable-Objekt zu erstellen, die eine zukünftige Aufgabe und dann können wir Java Thread-Pools Executor, diese zu verarbeiten asynchron.
Schauen wir uns das Beispiel von FutureTask mit einem einfachen Programm.
Da FutureTask erfordert ein callable-Objekt, erstellen wir ein einfaches Callable Umsetzung.