代码:
object Blub {
import scala.concurrent.stm._
val last = Ref("none")
def bla() = atomic { implicit txn =>
last() = "outer"
try {
atomic { implicit txn =>
last() = "inner"
println(last())
throw new RuntimeException
}
} catch {
case _: RuntimeException =>
}
}
def main(args: Array[String]): Unit = {
bla()
println("Result: "+last.single())
}
}
输出:
inner
inner
Result: outer
有人可以解释为什么内部原子块会运行两次吗?我知道由于异常它执行了回滚,因此得到了最终结果。但我不明白为什么要再次运行代码。