【发布时间】:2011-04-05 21:55:09
【问题描述】:
我真的很困惑我读到的关于 volatile 关键字在 java 中的应用。
以下说法正确吗? “对 volatile 字段的写入发生在对同一字段的每次后续读取之前”
理想情况下应该在什么时候使用 volatile 关键字?
-
有什么区别:
class TestClass { private int x; synchronized int get(){return x;} synchronized void set(int x){this.x = x;} }
和
class TestClass
{ private volatile int x;
int get(){return x;}
void set(int x){this.x = x;}
}
【问题讨论】:
-
澄清我的自动“可能”重复评论:前两个建议不是完全重复的;我的是。重要的是,将此问题作为重复解决,因为该问题的选定答案在说明 volatile 仅影响声明为 volatile 的字段时是危险的不正确 - 事实上,对任何 volatile 变量的写入和读取都会引入完整的内存屏障,就像两个线程之间的同步一样。