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
我想要回答的问题是:
- 它们的相似之处和不同之处是什么?
- 这两者的性能特征有何区别?哪一个能够更好地扩展?
关于相似性/差异性,我已经总结出以下内容:
相似之处: 最基本的相似点是,与Java Future相比,它们两个都是非阻塞的。这两个类都有可用于将侦听器添加到future、检查任务的失败和成功以及从任务获取结果的方法。
不同之处: CompletableFuture
似乎具有更丰富的接口,可以组合多个异步活动等。而Netty的io.netty.util.concurrent.Future
则允许将多个侦听器添加到同一个Future中,并且还允许删除侦听器。
CompletableFuture.thenDoSomething()
方法,这类似于在其他未来框架中添加多个监听器。 - Vladimir KorenevCompletableFuture
(以及任何实现CompletionStage
接口的类)都有像thenApply
和thenApplyAsync
这样的方法,它们的工作方式不同。像thenApply
这样的方法将立即在同一线程上执行,而thenApplyAsync
将使用一个Executor
来执行,该Executor
可以使用事件循环实现(尽管默认情况下是一个工作窃取池)。 - kag0