Scala中的Future与Promise是什么?相关实用学习资源求推荐
Scala 并发场景下 Promise 与 Future 学习参考
核心概念前置梳理
先把两者的定位区分开,能帮你快速建立认知框架:
- Future 是只读的结果容器,代表一个尚未完成的异步操作的结果,你只能读取它完成后的值,或是给它绑定回调处理成功/失败逻辑,无法主动给它赋值。
- Promise 是可写的结果容器,本质是 Future 的生产者,你可以通过
success()、failure()方法主动给它绑定结果,它内部关联的 Future 会随之进入完成状态。
可以简单理解为:Promise 是发件方,Future 是收件方,发件方把结果塞入 Promise 之后,收件方才能通过 Future 拿到内容,整个过程不需要阻塞当前线程。
你可以先跑通下面的最小 Demo 直观感受两者的配合逻辑:
import scala.concurrent.{Future, Promise} import scala.concurrent.ExecutionContext.Implicits.global import scala.util.{Success, Failure} object PromiseFutureDemo extends App { // 1. 新建 Promise 作为结果生产者 val strPromise: Promise[String] = Promise[String]() // 2. 获取关联的 Future 作为结果消费者 val strFuture: Future[String] = strPromise.future // 3. 给 Future 绑定回调,不需要阻塞等待结果 strFuture.onComplete { case Success(value) => println(s"异步操作结果:$value") case Failure(e) => println(s"异步操作出错:${e.getMessage}") } // 4. 异步线程中完成 Promise 赋值 Future { Thread.sleep(1000) strPromise.success("Promise 赋值完成") } Thread.sleep(2000) // 等待异步操作执行完毕 }
推荐学习资源
- 入门文字资源:优先查找 Scala 官方文档「Future and Promise」专题的社区中文译版,很多技术博客有整理过结构化的拆分内容,会把核心概念和场景示例绑定,比零散的文章可读性高很多。
- 视频类资源:找 Scala 并发编程入门的实战课,优先选择包含 Akka 场景结合的章节,这类课程大多会用 Akka 异步请求、跨 Actor 通信的场景演示两者的配合逻辑,比纯概念讲解更容易理解。
- 实战练习资源:找 Scala 并发编程习题集,从「用 Promise 实现异步回调转 Future」、「多个 Future 合并取值」这类基础题开始练,完成3-5个实操题基本就能理清两者的适用场景和区别。
Akka 场景补充提示
在 Akka 中你会经常用到 pipeTo 方法把 Future 的结果直接发给 Actor,本质就是用 Promise 中转异步结果,避免在回调里直接调用 Actor 内部方法导致线程安全问题,你可以结合 Akka 官方的示例把这个场景跑通,就能快速理解两者在实际项目中的作用。
内容的提问来源于stack exchange,提问作者Jonas_Astley
相关产品推荐
相关产品推荐

