gpt4 book ai didi

java - ForkJoinTask 与 CompletableFuture

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:20:25 25 4
gpt4 key购买 nike

在 Java 8 中有两种启动异步计算的方法 - CompletableFutureForkJoinTask .它们看起来都非常相似 - CompletableFuture 的内部类甚至扩展 ForkJoinTask .

是否有理由使用一个而不是另一个?

我能看到的一个关键区别是 CompletableFuture.join方法简单地阻塞直到 future 完成( waitingGet 只是使用 ManagedBlocker 旋转),而 ForkJoinTask.join可以从队列中窃取工作以帮助您完成正在加入的任务。

两者之间有什么好处吗?

最佳答案

它们是两个不同的东西,ForkJoinTask是一个可以提交给 ForkJoinPool 的任务, CompletableFuture是一个可以与任何 Executor 一起工作的 promise 并且执行者不需要是 ForkJoinPool ,

然而,常见的 ForkJoinPool 是真实的如果您未指定任何内容,则为默认值,例如:

CompletableFuture.supplyAsync(()-> supplier);

使用 ForkJoinPool如果你没有通过 Executor .还有一个overload这需要 Executor .

CompletableFuture.supplyAsync(()-> supplier,executor);

Async ,这是一个 staticCompletableFuture 中上课延伸ForkJoinTask<Void> , 但它不需要是 ForkJoinTask , 来自 Async 的文档

/** Base class can act as either FJ or plain Runnable */

abstract static class Async extends ForkJoinTask<Void>
implements Runnable, AsynchronousCompletionTask

它也可以是Runnable和一个 AsynchronousCompletionTask

旁注:ForkJoinTask , ForkJoinPool , ForkJoin...类是在 1.7 而不是 1.8 中添加的

关于java - ForkJoinTask 与 CompletableFuture,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33944471/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com