En Java 8, il existe deux façons de lancer des calculs asynchrones - CompletableFuture
et ForkJoinTask
. Ils semblent tous deux assez similaires - les classes internes de CompletableFuture
même étendre ForkJoinTask
.ForkJoinTask vs CompletableFuture
Y a-t-il une raison d'utiliser l'un sur l'autre?
une des principales différences que je peux voir est que la méthode CompletableFuture.join
simplement des blocs jusqu'à ce que l'avenir est terminé (waitingGet
juste spins en utilisant un ManagedBlocker
), alors qu'un ForkJoinTask.join
peut voler le travail de la file d'attente pour aider la tâche que vous joindre à compléter.
Y a-t-il un avantage par rapport à l'un ou l'autre?
Je suppose que ma question est plus au sujet de quand vous utiliseriez un et pas l'autre (en supposant que vous utilisez le FJP commun par défaut). Lorsque vous rejoignez un CompletableFuture, est-ce que cela vous aide à compléter la tâche à laquelle vous vous joignez? – thecoop
@thecoop Je ne vois pas comment vous pouvez remplacer l'un avec l'autre, CompletableFuture est une promesse qui a une opération comme thenApply et ensuiteCompose, maintenant si votre question est quand est-ce que j'utilise ForkJoinTask? Je dirais quand vous écrivez vos propres algorithmes parallèles –