Java 8的CompletableFuture与Netty Future有何区别?

13

CompletableFuture是JDK 8中引入的,与Netty提供的io.netty.util.concurrent.Future相比如何?

Netty文档提到:

  

JDK 8添加了CompletableFuture,它与io.netty.util.concurrent.Future有些重叠。http://netty.io/wiki/using-as-a-generic-library.html

我想要回答的问题是:

  1. 它们的相似之处和不同之处是什么?
  2. 这两者的性能特征有何区别?哪一个能够更好地扩展?

关于相似性/差异性,我已经总结出以下内容:

相似之处: 最基本的相似点是,与Java Future相比,它们两个都是非阻塞的。这两个类都有可用于将侦听器添加到future、检查任务的失败和成功以及从任务获取结果的方法。

不同之处: CompletableFuture似乎具有更丰富的接口,可以组合多个异步活动等。而Netty的io.netty.util.concurrent.Future则允许将多个侦听器添加到同一个Future中,并且还允许删除侦听器。


您可以多次调用 CompletableFuture.thenDoSomething() 方法,这类似于在其他未来框架中添加多个监听器。 - Vladimir Korenev
CompletableFuture是否像Netty Future一样有事件循环? - user1870400
@user1870400 CompletableFuture(以及任何实现CompletionStage接口的类)都有像thenApplythenApplyAsync这样的方法,它们的工作方式不同。像thenApply这样的方法将立即在同一线程上执行,而thenApplyAsync将使用一个Executor来执行,该Executor可以使用事件循环实现(尽管默认情况下是一个工作窃取池)。 - kag0
这个主题在这里有一些讨论:https://github.com/netty/netty/issues/2105 - ccleve
1个回答

5
如果我们看整个段落(尤其是第一句话)
Java有时会通过采用包含Netty提供的结构的想法来推进。例如,JDK 8添加了CompletableFuture,它在某种程度上与io.netty.util.concurrent.Future重叠。在这种情况下,Netty的结构为您提供了良好的迁移路径;我们将刻苦努力地更新API,考虑未来的迁移。
基本上它的意思是 netty FutureCompletableFuture 是相同的概念,但由不同的人在不同的时间实现。Netty 制作他们的 future 是因为在 Java 中没有可用的 future,他们不想从像 Guice 这样的依赖中提取一个。但现在,Java 已经创建了一个,并且可以使用。在段落的结尾,他们基本上是在说 netty API 可能会在将来用 CompletableFuture 替换 Future。就相似性/差异而言,它们都只是 future/promise 模式的许多实现之一。当您使用 netty api 和特定于 netty 的内容时,请使用 netty one,否则请使用 CompletableFuture

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接