Означает ли изменчивость означает, что это потокобезопасный - PullRequest
1 голос
/ 30 января 2012

В Java, когда мы хотим убедиться, что компилятор не должен выполнять оптимизацию, сохраняя локальную копию переменной, мы делаем переменную volatile. Использование переменной как volatile гарантирует, что потоки не будут использовать локальную копию переменной, но они будут использовать переменную так, как она хранится в основной памяти. Но означает ли это, что переменная volatile является поточно-ориентированной? Кроме того, как это отличается в случае примитивного типа и в случае, если мы используем определенный пользователем объект?

Ответы [ 5 ]

9 голосов
/ 30 января 2012

volatile означает, что значение всегда будет новым; если другой поток поместит новый объект в переменную перед вами, вы увидите этот объект.

Не меняет поведение значения; вы не можете волшебным образом сделать объект потокобезопасным.

3 голосов
/ 30 января 2012

вовсе нет, на самом деле volatile означает, что это значение может быть сразу замечено другим потоком, но don't означает, что оно поточно-безопасно, оно не поточно-безопасно.

Вы можете увидеть это: http://java.sun.com/docs/books/jls/third_edition/html/classes.html и найти ключ volatile Fields

другой см. Здесь: http://www.ibm.com/developerworks/java/library/j-jtp06197/index.html

0 голосов
/ 30 января 2012

значение переменной volatile никогда не будет храниться в потоке локально.

все операции чтения и записи отправляются в основную память.

значение volatile различается в зависимости от версии Java (т.е. до Java 1.4 и после Java5.0).

еще одна ссылка о летучих

0 голосов
/ 30 января 2012

Volatile обычно наиболее подходит для «простого» состояния. Ex. переменная логического члена, которая может быть установлена, чтобы сообщать рабочему потоку о завершении.

0 голосов
/ 30 января 2012

переменная переменная обеспечивает видимость и не является атомарной.

...