嵌套期货的此代码是否会造成死锁?

假设我有一个ExecutionContext支持一个固定线程池和一个函数foo,该函数创建了两个嵌套的Future。

import scala.concurrent._

implicit val ec = ExecutionContext.fromExecutor(new ThreadPoolExecutor(...))
def foo(): Future[Int] = new Future {
  ...
  new Future { ... }
}   

我猜这段代码可能会在foo创建许多占用所有线程的Futures之后卡住,因为它们无法创建第二个嵌套的{{1 }}。这是对的吗 ?

annalamiya 回答:嵌套期货的此代码是否会造成死锁?

只要所有Future都没有阻塞地运行完成,就不会有死锁。

如果Future内的代码将被阻塞,则它应位于blocking语句内。这将创建一个新线程,以防止原始线程池出现线程不足的情况。

如果Future等待另一个Future生成的结果,则可能会出现死锁。

本文链接:https://www.f2er.com/3149679.html

大家都在问