Netty 中 Future 和 Promise 的区别

本文深入解析Promise和Future的概念,强调二者在异步编程中的角色差异。Future作为只读容器,其结果由异步计算确定;而Promise允许结果的外部设置,更灵活。Java8中的CompletableFuture兼具两者特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Future 和 Promise 是非常相似的概念,不同之处在于,Future 是针对尚不存在的结果的只读容器,而 Promise 可以被写入(通常只能写入一次)。可以将Java 8 CompletableFuture和SettableFuture视为 Promise,因为可以设置它们的值,但是它们也实现了Future接口,因此对于客户端而已它们没什么区别。

Future 的结果由异步计算的结果确定。请注意,必须使用Callable或Runnable初始化FutureTask(经典的Future),没有无参数构造函数,并且Future和FutureTask都是从外部只读的(FutureTask的set方法受保护)。该值将从内部设置为计算结果。

 

另一方面,Promise 的结果可以由你(或实际上任何人)随时设置,因为它具有公共设置方法。可以创建CompletableFuture和SettableFuture,而无需执行任何任务,并且可以随时设置它们的值。你向客户代码发送一个 Promise,并在以后根据需要执行。注意,CompletableFuture不是“纯粹的”Promise,可以使用诸如FutureTask之类的任务对其进行初始化,并且它最有用的功能是与处理链的步骤无关。

 

总结:

Promise最终被称为CompletableFuture,在Java 8中,它的javadoc解释了:可以明确完成(设置其值和状态)并可以用作CompletionStage的Future,它支持在完成时触发的相关功能和操作。

 

原文地址: https://www.zhblog.net/go/java/tutorial/java-netty-difference-future-promise?t=604

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值