【发布时间】:2018-09-30 03:55:00
【问题描述】:
我编写了以下简单的应用程序:
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
}
}
【问题讨论】:
标签: multithreading scala jvm stack