You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 14:57:03