默认Global Execution Context

在未指定context时,执行scala future代码,scala会给出指示:

scala> Future(println("Do something slow"))
<console>:14: error: Cannot find an implicit ExecutionContext, either require one yourself or import ExecutionContext.Implicits.global

Scala提供了一个global的ExecutionContext,它启动一个ForkJoinPool,其并发度即为JVM的CPU数(执行Runtime.getRuntime.availableProcessors()获得)。Global ExecutionContext保证CPU处于忙碌状态,限制线程之间context切换的开销。

但是,如果有很多阻塞的需求,建议使用自己的线程池。

参考资料:

Example

阻塞的并行执行示例:

import scala.concurrent.{Await, Future}
import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.duration._

object FutureTest {
  def main(args: Array[String]): Unit = {
    val list = List(1, 3, 2)
    val futures = list.map {
      value => doIt(value)
    }

    futures.map {
      future =>
        Await.ready(future, 10 seconds)
    }
  }
  
  def doIt(value: Int): Future[Unit] = Future {
      Thread.sleep(2000)
      println(Thread.currentThread()+ "-" + value)
  }
}