如果在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