如何在scala期货中跨线程传输值

时间:2017-01-10 17:54:26

标签: scala future var mutable concurrent.futures

新线程如何访问num。 Future将在新线程上执行。如何在新线程中访问主线程的堆栈帧中的num值?它存放在哪里?

object TestFutureActor extends App {

  var num = 10

  val addNum = Future {

    num = num + 2
    num

  }
}

1 个答案:

答案 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内存模型的文章,以便更深入地了解它。