In Java 8 gibt es zwei Möglichkeiten, asynchrone Berechnungen zu starten - CompletableFuture
und ForkJoinTask
. Sie scheinen beide ziemlich ähnlich zu sein - die inneren Klassen von CompletableFuture
sogar verlängern ForkJoinTask
.ForkJoinTask vs CompletableFuture
Gibt es einen Grund, einen über den anderen zu verwenden?
Ein wichtiger Unterschied, dass ich sehen kann, ist, dass die CompletableFuture.join
Methode einfach blockiert, bis die Zukunft abgeschlossen ist (waitingGet
dreht gerade ein ManagedBlocker
verwenden), während ein ForkJoinTask.join
Arbeit aus der Warteschlange stehlen kann die Aufgabe, die Sie auf sind Beitritt zu helfen fertigstellen.
Gibt es einen Vorteil gegenüber dem einen oder anderen?
Ich nehme an, meine Frage ist mehr darüber, wann Sie eine und nicht die andere verwenden würden (vorausgesetzt, Sie verwenden die standardmäßige gemeinsame FJP). Wenn Sie sich einer CompletableFuture anfügen, wird die Aufgabe, der Sie beitreten möchten, unterstützt? – thecoop
@thecoop Ich sehe nicht, wie Sie einen durch den anderen ersetzen können, ComplectableFuture ist ein Versprechen, das eine Operation wie thenApply und thenCompose hat, jetzt, wenn Ihre Frage ist wann verwende ich ForkJoinTask? Ich würde sagen, wenn Sie Ihre eigenen parallelen Algorithmen schreiben –