第二十章 Future 和Promise

Future 提供了一套高效便捷的非阻塞并行操作管理方案。其基本思想很简单,所谓 Future ,指的是一类占位符对象,用于指代某些尚未完成的计算的结果。一般来说,由 Future 指代的计算都是并行执行的,计算完毕后可另行获取相关计算结果。 以这种方式组织并行任务,便可以写出高效、异步、非阻塞的并行代码。

默认情况下,FuturePromise 并不采用一般的阻塞操作,而是依赖回调进行非阻塞操作。为了在语法和概念层面更加简明扼要地使用这些回调,Scala还提供了 flatMapforeachfilter 等函数,使得我们能够以非阻塞的方式对 Future 进行组合。当然, ``Future``仍然支持阻塞操作——必要时,可以阻塞等待 ``Future``(不过并不鼓励这样做)。

一个典型的 Future 示例如下:

val inverseFuture: Future[Matrix] = Future {
    fatMatrix.inverse() // non-blocking long lasting computation
}(executionContext)

或者使用更加通用的写法:

上面的代码将 fatMatrix.inverse() 放在 ExecutionContext 中执行,然后将计算结果放在 inverseFuture 中。