知识卡片
Future先给契约
内容
Future 模式把”发起任务”和”取得结果”分开:调用方发起调用时不立即等待,而是拿到一个契约,耗时逻辑放到另一线程执行,需要时再凭契约获取。书中 RPC 例子:三次各 500ms 的远程调用,同步串行要 1500ms,并发发起只需约 500ms。但 Java 的 Future 不支持异步回调,取结果仍要主动 get() 阻塞,[[回调反转方向]] 才把方向也反转。
参考来源
- 位置:《Java高并发核心编程.卷2,多线程、锁、JMM、JUC、高并发设计模式》第8章《高并发设计模式》8.5节《Future模式》(源文件:_epub-src/OEBPS/Text/chapter275.xhtml)
- 结论依据:原文说明“它不是立即返回我们所需要的数据,但是它会返回一个契约(或异步任务),将来我们可以凭借这个契约(或异步任务)获取需要的结果”,并用三次各500毫秒的RPC调用对比同步1500毫秒与异步并发500毫秒,同时明确“Java的Future实现类并没有支持异步回调,仍然需要主动获取耗时任务的结果;而Java 8中的CompletableFuture组件实现了异步回调模式”,因此推出本卡结论。
- 原始内容:Future模式的核心思想是异步调用……它不是立即返回我们所需要的数据,但是它会返回一个契约(或异步任务),将来我们可以凭借这个契约(或异步任务)获取需要的结果……Java的Future实现类并没有支持异步回调,仍然需要主动获取耗时任务的结果;而Java 8中的CompletableFuture组件实现了异步回调模式。