我对局部变量如何工作的心理模型是它们存储在堆栈中,每个线程都有自己的堆栈,并且线程之间不能访问堆栈。
在 Java 中,我实际上不确定如何修改衍生线程中的局部变量,因为编译器抱怨我无法在 lambda 或内部类中修改它。
但是,在 Scala 中我可以这样做:
implicit val ec = scala.concurrent.ExecutionContext.global
var i = 5
val f = Future {
println((1, i))
i = 6
println((1, i))
}
val g = Future {
println((2, i))
println((2, i))
println((2, i))
}
Await.result(f, 3.seconds)
并获得结果
(2,5)
(1,5)
(2,5)
(2,6)
(1,6)
线程#2 如何看到线程#1 的修改?
慕容3067478
相关分类