新线程如何访问num。 Future将在新线程上执行。如何在新线程中访问主线程的堆栈帧中的num值?它存放在哪里?
object TestFutureActor extends App {
var num = 10
val addNum = Future {
num = num + 2
num
}
}
答案 0 :(得分:0)
通常关于JVM内存模型的问题。真的,你可以从不同的地方读取你的变量值。它可以在处理器缓存中或在内存中,例如,您的并行读/写通常是非同步的。例如,下面的代码对JVM来说绝对合法。
var a, b = 0
Thread 1 | Thread 2
a = 1 | val c = b // c = 2
b = 2 | val d = a // d = 0
如果您需要将操作与变量同步,则需要在它们之间使用happens-before
同步。
这是一个非常深刻的问题,我认为你应该阅读一些关于Java内存模型的文章,以便更深入地了解它。