我试图了解来自 Java 背景的 Scala future :我知道你可以写:
val f = Future { ... }
那么我有两个问题:
此外,如何实现
scheduledFuture
,即在特定时间延迟后执行的那个?谢谢 最佳答案
Future { ... }
块是调用 Future.apply
(因为我相信你知道 Maciej)的语法糖,将代码块作为第一个参数传递。
查看 docs for this method ,您可以看到它采用隐式 ExecutionContext
- 正是这个上下文决定了它将如何执行。因此,要回答您的第二个问题, future 将由隐式范围内的任何 ExecutionContext 执行(当然,如果这不明确,则是编译时错误)。
在许多情况下,这将是 import ExecutionContext.Implicits.global
中的一个,可以通过系统属性进行调整,但默认情况下使用 ThreadPoolExecutor
,每个处理器内核一个线程。
然而,调度是另一回事。对于某些用例,您可以提供自己的 ExecutionContext
,它始终在执行前应用相同的延迟。但是,如果您希望从调用站点控制延迟,那么您当然不能使用 Future.apply
,因为没有参数来传达应该如何安排它。在这种情况下,我建议将任务直接提交给预定的执行者。
关于Scala - future 和并发,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16357596/