In diesem Artikel werden hauptsächlich Callable und Future of Java-Parallelitäts-Thread-Pools ausführlich vorgestellt, die einen bestimmten Referenzwert haben:
Einführung in Callable and Future
Callable und Future sind eine interessante Kombination. Wir müssen sie verwenden, wenn wir die Ausführungsergebnisse des Threads erhalten müssen. Callable wird verwendet, um Ergebnisse zu erzeugen, und Future wird verwendet, um Ergebnisse zu erhalten.
1. Callable
Callable ist eine Schnittstelle, die nur eine call()-Methode enthält. Ein Callable ist eine Aufgabe, die ein Ergebnis zurückgibt und möglicherweise eine Ausnahme auslöst.
Um das Verständnis zu erleichtern, können wir Callable mit einer Runnable-Schnittstelle vergleichen, und die call()-Methode von Callable ähnelt der run()-Methode von Runnable.
Der Quellcode von Callable lautet wie folgt:
1 2 3 |
|
Erklärung: Davon haben wir Sie können sehen, dass Callable Generics unterstützt.
2. Zukunft
Zukunft ist eine Schnittstelle. Es wird verwendet, um die Ergebnisse asynchroner Berechnungen darzustellen. Es werden Methoden bereitgestellt, um zu überprüfen, ob die Berechnung abgeschlossen ist, um auf den Abschluss der Berechnung zu warten und um das Ergebnis der Berechnung zu erhalten. Der Quellcode von
Future lautet wie folgt:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
Erklärung: Future wird zur Darstellung des verwendet Ergebnisse asynchroner Berechnungen. Seine Implementierungsklasse ist FutureTask. Bevor wir FutureTask erklären, schauen wir uns zunächst das Beziehungsdiagramm zwischen Callable, Future und FutureTask wie folgt an:
Beschreibung:
(01) RunnableFuture ist eine Schnittstelle, die die beiden Schnittstellen Runnable und Future erbt. Der Quellcode von RunnableFuture lautet wie folgt:
1 2 3 |
|
(02) FutureTask implementiert die RunnableFuture-Schnittstelle. Daher sagen wir auch, dass es die Future-Schnittstelle implementiert.
Beispiel und Quellcode-Analyse (basierend auf JDK1.7.0_40)
Sehen wir uns zunächst die grundlegende Verwendung von Callable und Future anhand eines Beispiels an Analysieren Sie dann das Beispielimplementierungsprinzip.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
|
Laufergebnis:
4950
Ergebnisbeschreibung:
Erstellen Sie im Haupt-Thread main einen neuen Thread-Pool über newSingleThreadExecutor(). Erstellen Sie dann das aufrufbare Objekt c1, senden Sie c1 zur Verarbeitung über pool.submit (c1) an den Thread-Pool und speichern Sie das zurückgegebene Ergebnis im zukünftigen Objekt f1. Dann erhalten wir die in Callable gespeicherten Ergebnisse über f1.get(); schließlich schließen wir den Thread-Pool über pool.shutdown().
1. subscribe()
submit() ist in java/util/concurrent/AbstractExecutorService.java implementiert folgt:
1 2 3 4 5 6 7 8 9 |
|
Erklärung: subscribe() erstellt das RunnableFuture-Objekt ftask über newTaskFor(task). Der Quellcode lautet wie folgt:
1 2 3 |
|
2. FutureTasks Konstruktor
Der Konstruktor von FutureTask lautet wie folgt:
1 2 3 4 5 6 7 8 |
|
3. Die run()-Methode von FutureTask
Kommen wir zurück zum Quellcode vonsubmit().
Nachdem newTaskFor() ein Ftask-Objekt erstellt hat, wird die Aufgabe über Execute(ftask) ausgeführt. Zu diesem Zeitpunkt wird ftask als ausführbares Objekt ausgeführt und seine run()-Methode wird schließlich aufgerufen. Die run()-Methode von ftask ist in java/util/concurrent/FutureTask.java implementiert und der Quellcode lautet wie folgt :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
|
Erklärung: run() führt die call()-Methode des Callable-Objekts aus und schließlich Speichern Sie das Ergebnis unter result. Speichern Sie das Ergebnis über set(result).
Nach dem Aufruf der get()-Methode von FutureTask wird der von set(result) gespeicherte Wert zurückgegeben.
Das obige ist der detaillierte Inhalt vonDetaillierte Code-Erklärung von Callable und Future im Java-Parallelitäts-Thread-Pool. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!