2017-01-10 5 views
0

Как получить доступ num к новому потоку. Будущее будет исполнено в новом потоке. как значение num, которое находится в стеке стека основного потока, доступного в новом потоке? Где он хранится?Как передаются значения по потокам в фреймах scala

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 для более глубокого понимания этого.

Смежные вопросы