nat*_*api 5 concurrency scala future file
我试图对目录中的每个文件同时运行一个函数。可悲的是,每当我使用 Futures 时,我的程序都不想终止(永远运行)。我尝试过使用Await.result()相同的结果:/
运行代码时,它执行得很好,甚至“完成?” 被打印然后挂起......
这是我的代码。(我是 Scala 新手)
val execService = Executors.newFixedThreadPool(3)
implicit val execContext = ExecutionContext.fromExecutorService(execService)
val futures = for (file <- filesList) yield Future {
println(file)
// theFunc(file)
}
val seq = Future.sequence(futures)
seq.onComplete {
case Success(x) => println("finish?")
case Failure(e) => println(e)
}
Run Code Online (Sandbox Code Playgroud)
Executors.newFixedThreadPool在幕后使用defaultThreadFactory创建非守护线程
返回用于创建新线程的默认线程工厂。该工厂在同一个 ThreadGroup 中创建 Executor 使用的所有新线程...每个新线程都创建为非守护线程
因为这些是非守护线程,所以程序不会终止。另一方面,例如scala.concurrent.ExecutionContext.Implicits.global创建守护线程
val threadFactory = new DefaultThreadFactory(daemonic = true,
maxBlockers = getInt("scala.concurrent.context.maxExtraThreads", "256"),
prefix = "scala-execution-context-global",
uncaught = (thread: Thread, cause: Throwable) => reporter(cause))
Run Code Online (Sandbox Code Playgroud)
我们注意到daemonic = true,因此以下程序将在最后终止
implicit val execContext = scala.concurrent.ExecutionContext.Implicits.global
val futures = for (file <- filesList) yield Future {
println(file)
// theFunc(file)
}
...
Run Code Online (Sandbox Code Playgroud)
基于
| 归档时间: |
|
| 查看次数: |
444 次 |
| 最近记录: |