当前正在运行scala,以便理解本地范围中没有未来变量的情况

当前正在运行scala,以便理解本地范围中没有未来变量的情况,scala,concurrency,future,Scala,Concurrency,Future,假设我有一个未来的结果,我们称之为garfield def garfield=未来{ 线程。睡眠(100) System.currentTimeMillis() } 我可以像这样在中同时运行garfield来理解 val f1=garfield val f2=加菲猫 为了{ r1因为理解原则上是顺序的,所以不,这不起作用 您的代码将依次计算f1和f2 以下几点应该有效 (更新了@ViktorKlang的一些更改) objectfutureforextends应用程序{ 导入concurrent

假设我有一个未来的结果,我们称之为
garfield

def garfield=未来{
线程。睡眠(100)
System.currentTimeMillis()
}
我可以像这样在
中同时运行
garfield
来理解

val f1=garfield
val f2=加菲猫
为了{

r1因为理解原则上是顺序的,所以不,这不起作用

您的代码将依次计算f1和f2

以下几点应该有效

(更新了@ViktorKlang的一些更改)

objectfutureforextends应用程序{
导入concurrent.ExecutionContext.Implicits.global
为了{

_谢谢,@Ivan。不过我真的很困惑,因为它常常需要并发执行。你可能需要重复运行几次。嗯……当我尝试这个时,发生了一些奇怪的事情。可能与调用
Future的开销有关。应用
@IvanStanislavciuc@CervEd区分这一点很重要“并发资格”和“并发执行”".Ivan上面的代码使
f1
f2
都有资格并发执行它们的实际执行方式和顺序完全由
ExecutionContext
决定,最终由OS线程调度程序决定。@CervEd我推荐的方法如下:@ViktorKlang@CervEd感谢注释。我用
unit
更新了答案,而不是
successful
Started:2020-04-24T13:23:46.043230Z on pool-1-thread-3. Stopped 2020-04-24T13:23:46.889296Z
Started:2020-04-24T13:23:46.428162Z on pool-1-thread-10. Stopped 2020-04-24T13:23:47.159586Z
....