1. Konzept
Future stellt das Ergebnis einer asynchronen Aufgabe dar, die möglicherweise nicht abgeschlossen wurde. Zu diesem Ergebnis kann ein Rückruf hinzugefügt werden, um entsprechende Vorgänge auszuführen, nachdem die Aufgabenausführung erfolgreich war oder fehlgeschlagen ist.
2. Zukünftige Schnittstelle
Die Future-Schnittstelle definiert fünf Hauptschnittstellenmethoden: RunnableFuture und ScheduleFuture erben diese Schnittstelle, und CompleteFuture und ForkJoinTask erben diese Schnittstelle.
3. Beispiele
Pakettest; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.FutureTask; öffentliche Klasse CallableFutureTest { public static void main(String[] args) { long startTime = System.currentTimeMillis(); Callable<Integer> berechneCallable = new Callable<Integer>() { @Override public Integer call() löst eine Ausnahme aus { // TODO Automatisch generierter Methoden-Stub Thread.sleep(2000); //Simulation zeitaufwändig int result = 1+2; Ergebnis zurückgeben; } }; FutureTask<Integer> berechneFutureTask = new FutureTask<>(calculateCallable); Thread t1 = neuer Thread(calculateFutureTask); t1.start(); // Treten Sie jetzt Thread bei, um einen zeitaufwändigen Dienst auszuführen, der Fernaufrufe simuliert und sich auf seine Berechnungsergebnisse verlässt (z. B. einen Netzwerkrechner). versuchen { // Zeitaufwändige Aufgaben simulieren, der Hauptthread erledigt seine eigene Sache und spiegelt die Vorteile von Multithreading wider Thread.sleep(3000); int a = 3+5; Ganzzahliges Ergebnis = berechneFutureTask.get(); System.out.println("result = "+(a+result));//Simulieren Sie das laufende Ergebnis des Hauptthreads basierend auf dem Unterthread long endTime = System.currentTimeMillis(); System.out.println("time = "+(endTime-startTime)+"ms"); } Catch (InterruptedException | ExecutionException e) { // TODO Automatisch generierter Catch-Block e.printStackTrace(); } } }
Wie Sie oben sehen können, beträgt die Zeit, die der Hauptthread benötigt, tatsächlich etwa 3 Sekunden. Wenn wir Future nicht verwenden und uns auf die Ergebnisse des Threads verlassen Die Zeit, die wir möglicherweise benötigen, kann 5 Sekunden betragen (Unter-Thread 2 Sekunden + Haupt-Thread 3 Sekunden).
Das Obige ist, wie Future Thread-Ergebnisse in Java erhält. Man kann sagen, dass Future bei der Verarbeitung von Threads flexibler ist. Der Mechanismus besteht ungefähr darin, dass ein anderer Thread gleichzeitig ausgeführt wird. Wenn Sie interessiert sind, können Sie nach dem Unterricht mehr erfahren.