- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在 Java 8 中有两种启动异步计算的方法 - CompletableFuture
和 ForkJoinTask
.它们看起来都非常相似 - 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
,这是一个 static
在 CompletableFuture
中上课延伸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/
我有一个长时间运行的计算,已与 Java's ForkJoinTask 分开. Java's FutureTask提供了一个模板方法done()。 Overriding this method all
我正在尝试 Java ForkJoin 框架并编写了一个程序来处理大型数据列表。 众所周知,ForkJoinTask 中总是设置字段阈值来指出数据列表分区的最小数量。 问题是,阈值设置多大或小会带来更
在 Java 8 中有两种启动异步计算的方法 - CompletableFuture和 ForkJoinTask .它们看起来都非常相似 - CompletableFuture 的内部类甚至扩展 Fo
JavaDoc ForkJoinTask 说: [R]eturns (joins) should be performed innermost-first. For example, a.fork()
前段时间我发现了 Scala Async Project .问题是:这个不能通过普通函数(没有宏扩展)实现的 async block 有什么神奇之处? 让我们看一下介绍中的第一个例子: import
API 说:“方法invokeAll(有多个版本)执行最常见的并行调用形式: fork 一组任务并将它们全部连接起来。” 所以我的假设是,如果我使用 invokeAll(),我就不再需要使用 fork
当我在阅读时 the javadoc about ForkJoinTask我遇到了以下声明: This method may be invoked only from within ForkJoinP
我目前正在评估各种并发解决方案来解决业务问题。该用例类似于“尴尬并行”算法。 基本上,对于单个用户请求,我们需要在计算响应之前从多个不同的数据源检索数据。目前,所有 3 个 DAO 调用都是串行进行的
是否有计划利用 java 7 util.concurrent 的 ForkJoin API 或在 Akka 中公开类似的 API? 最佳答案 我们一直在与 Doug Lea 合作改进 Akka 的 F
“在 ForkJoinPool 中运行的任务的抽象基类。ForkJoinTask 是一个类似线程的实体,比普通线程轻得多。大量的任务和子任务可能由中的少量实际线程托管一个 ForkJoinPool,以
我正在阅读 Java ForkJoin 框架。不直接在 ForkJoinTask 的实现上调用 invoke()(例如 RecursiveTask),而是实例化 ForkJoinPool 有什么额外的
假设我们扩展了一个名为 MyRecursiveTask 的 RecursiveTask。 然后在 forkJoinTask 的范围内创建两个子任务: MyRecursiveTask t1 = new
我一直在使用Java7的Fork/Join并发框架,效果不错。我终于开始阅读 ForkJoinTask 的 API 的 javadoc,它包含以下段落: ForkJoinTasks should pe
来源: public static void invokeAll(ForkJoinTask t1, ForkJoinTask t2) { t2.fork(); t1.invoke();
这是 javadoc对于两者: get():必要时等待计算完成,然后检索其结果。 invoke():开始执行这个任务,如有必要,等待其完成,并返回其结果,或者抛出一个(未经检查的)RuntimeExc
我是一名优秀的程序员,十分优秀!