【发布时间】:2013-03-07 10:08:02
【问题描述】:
如果在Java中将一个成员变量声明为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关键字作为在易失性内存中存储对象,但它确保读取和写入是原子的。 docs.oracle.com/javase/tutorial/essential/concurrency/… -
所有变量都存储在易失性内存(即 RAM)中,与
volatile修饰符无关。 en.wikipedia.org/wiki/Volatile_memory -
@gerrytan volatile 与其说是原子性,不如说是关于可见性。
标签: java multithreading volatile