【发布时间】:2016-03-11 15:35:17
【问题描述】:
JDK 8中引入的CompletableFuture与Netty提供的io.netty.util.concurrent.Future相比如何?
Netty 文档提到
JDK 8 添加了有些重叠的 CompletableFuture
io.netty.util.concurrent.Futurehttp://netty.io/wiki/using-as-a-generic-library.html
我试图得到答案的问题是:
- 它们的相同点和不同点是什么?
- 两者的性能特征有何不同?哪一个能够更好地扩展?
关于相同点/不同点,我已经能够提出以下几点:
相似之处: 基本的相似之处在于与 Java Future 相比,两者都是非阻塞的。这两个类都有可用于向未来添加侦听器、内省任务的失败和成功并从任务中获取结果的方法。
区别:
CompletableFuture 似乎有一个更丰富的接口,用于编写多个异步活动等。另一方面,Netty 的 io.netty.util.concurrent.Future 允许将多个侦听器添加到同一个 Future,此外还允许删除侦听器。
【问题讨论】:
-
您可以多次调用
CompletableFuture.thenDoSomething()方法,类似于在其他未来框架中添加多个监听器。 -
CompletableFuture 有类似 Netty Future 的事件循环吗?
-
@user1870400
CompletableFuture(以及任何其他实现CompletionStage的类)具有像thenApply和thenApplyAsync这样的方法,它们以不同的方式工作。像thenApply这样的方法将立即在同一个线程上执行,而thenApplyAsync将使用Executor执行,这可以通过事件循环来实现(尽管默认是工作窃取池)。 -
这里有一些关于该主题的讨论:github.com/netty/netty/issues/2105
标签: java java-8 netty nonblocking completable-future