Bitte lesen Sie die Frage sorgfältig durch, bevor Sie diese als Duplikat markieren.Methodenaufruf für Future.get() - Blöcke. Ist das wirklich wünschenswert?
Unten ist das Snippet des Pseudocodes. Meine Frage ist - Ist der folgende Code nicht die Vorstellung der parallelen asynchronen Verarbeitung nicht zu besiegen?
Der Grund, warum ich das frage, ist, weil der Haupt-Thread in dem folgenden Code eine Aufgabe übergeben würde, die in einem anderen Thread ausgeführt werden soll. Nachdem die Aufgabe in der Warteschlange übergeben wurde, blockiert sie die Future.get() - Methode, damit die Aufgabe den Wert zurückgibt. Ich würde lieber die Aufgabe im Hauptthread ausführen lassen, anstatt mich einem anderen Thread zu unterziehen und auf die Ergebnisse zu warten. Was habe ich gewonnen, indem ich die Aufgabe in einem neuen Thread ausgeführt habe?
Ich bin mir bewusst, dass Sie für eine begrenzte Zeit usw. warten könnten, aber was ist dann, wenn mir das Ergebnis wirklich wichtig ist? Das Problem wird schlimmer, wenn mehrere Aufgaben ausgeführt werden müssen. Es scheint mir, dass wir die Arbeit nur synchron machen. Ich kenne die Guava-Bibliothek, die eine nicht blockierende Hörerschnittstelle bietet. Aber ich bin interessiert zu wissen, ob mein Verständnis für die Future.get() API korrekt ist. Wenn es richtig ist, warum ist das Future.get() so konzipiert, dass es blockiert, wodurch der gesamte Prozess der parallelen Verarbeitung zunichte gemacht wird?
Hinweis - Für die Aufzeichnung verwende ich JAVA 6
public static void main(String[] args){
private ExectorService executorService = ...
Future future = executorService.submit(new Callable(){
public Object call() throws Exception {
System.out.println("Asynchronous Callable");
return "Callable Result";
}
});
System.out.println("future.get() = " + future.get());
}
Die Idee ist, dass Sie mehrere Aufgaben einreichen würde und dann warten. Sie haben recht, wenn Sie zwischen den einzelnen Aufgaben auf das Ergebnis warten, werden sie seriell verarbeitet und Sie erhalten nichts. –
@SkinnyJ Wenn mehrere Aufgaben eingereicht werden, woher wissen Sie, welches Ergebnis für welche Aufgabe zurückgegeben wird? Und wie warte ich auf mehrere Aufgaben? –
@VishalP Sie haben dann eine Liste von Futures, die Sie mit isDone() überprüfen können oder holen Sie das Ergebnis mit get() – John