如果在Java中声明一个成员变量为volatile,这是否意味着所有对象的数据都存储在易失性内存中,或者对该对象的引用存储在易失性内存中?声明一个对象是volatile的
例如,如果我有下面的类:
class C{
int i = 0;
char c = 'c';
}
如果我声明它的一个实例如下:
private volatile C obj;
这是否存储参考到obj
在易失性存储器,或obj
的数据(obj.i
和obj.c
)volatile
内存?
是否使obj.c
和obj.i
线程安全?
Java SE 6教程未指定'volatile'关键字作为存储对象在易失性内存中,但它确保读取和写入是原子性的。 http://docs.oracle.com/javase/tutorial/essential/concurrency/atomic.html – gerrytan 2013-03-18 21:51:55
所有变量都存储在易失性存储器(即RAM)中,而不考虑volatile属性。 http://en.wikipedia.org/wiki/Volatile_memory – 2013-03-19 00:02:19
@gerrytan挥发性不是关于原子性,而是关于可见性。 – assylias 2013-03-22 08:47:13