CompletionService.take (). Isdone () Immer wahr?
-
25-09-2019 - |
Frage
Ist es sicher anzunehmen, dass das
java.util.concurrent.CompletionService.take().isDone()
Wird immer wahr zurückkehren? Wenn ja, warum nimmt () eine Zukunft zurück und nicht den Wert direkt? Wenn nicht, was bedeutet "abgeschlossene Aufgabe", wie in der Dokumentation verwendet?
Lösung
Weil Sie die Zukunft für andere Dinge nutzen können. Sie erhalten die Zukunft, wenn Sie einreichen (). Sie können also zunächst das zukünftige Objekt verwenden, das zurückgegeben wurde, um den Status zu überwachen oder vorzeitig abzusagen. Zweitens, wenn Sie die FutureFactory () (ich denke, es wird etwas anderes bezeichnet, aber ich habe Java 5 nicht installiert), können Sie alle möglichen zusätzlichen Mitglieder zum zukünftigen Objekt hinzufügen.
Wenn Sie also das take () machen, haben Sie Recht, dass in diesem Fall Teil der Zukunft (die Verfolgung/Stornierung des Staates) nicht sehr nützlich ist. Aber Otoh, warum nicht die gesamte Zukunft wie es ist, einschließlich erweiterter Funktionen?
Andere Tipps
Das scheint der Javadoc zu implizieren, take()
Blöcke, bis es eine fertige Zukunft zurückgeben kann, was natürlich zu tun wird, wenn sie zurückgegeben wird.