我写了以下简单应用程序:
我感到困惑的是,我们从另一个线程修改本地变量...而且该修改(由另一个线程进行)在主线程中可见。
我原以为本地变量总是驻留在堆栈中(堆栈内存底部指向
更新:即使我们按以下方式修改应用程序,它仍将打印相同的内容:
object Main extends App {
var v: Int = 0
val t = new Thread(() => v = 1)
t.start()
t.join()
println(v) //prints 1
}
我感到困惑的是,我们从另一个线程修改本地变量...而且该修改(由另一个线程进行)在主线程中可见。
我原以为本地变量总是驻留在堆栈中(堆栈内存底部指向
rsp
寄存器)。我认为堆栈内存是为应用程序中的每个线程分配的。更新:即使我们按以下方式修改应用程序,它仍将打印相同的内容:
object Main {
def main(args: Array[String]) = {
var v: Int = 0
val t = new Thread(() => v = 1)
t.start()
t.join()
println(v) //prints 1
}
}