2017-01-10 19 views
0

新しいスレッドがnumにアクセスする方法を教えてください。未来は新しいスレッドで実行されます。メインスレッドのスタックフレームにあるnumの値は、新しいスレッドでどのようにアクセス可能ですか?それはどこに保管されていますか?スカラ先物のスレッド間で値が転送される方法

object TestFutureActor extends App { 

    var num = 10 

    val addNum = Future { 

    num = num + 2 
    num 

    } 
} 

答えて

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メモリモデルに関する記事を読んでください。