此为历史版本和 IPFS 入口查阅区,回到作品页
MartinYeung
IPFS 指纹 这是什么

作品指纹

Java - Atomic VS Volatile

MartinYeung
·
·

閱讀時間: 3分鐘

當大家談論到Thread-safety就會有接觸到Atomic (原子性)和Volatile (可見性)。

相信你們會好奇,為什麼Volatile的中文會被解釋為可見性呢? 完全和字典上的意思不同。

不過這是合理的,因為在Java中Volatile是指可以確保在應用程式中的可見性,同時支持變量直接寫入到主記憶體(main memory)。

所以提到Volatile就會說它是表示可見性。

從字詞上,Atomic (原子性)和Volatile (可見性)都是很抽象。

但可以作簡單解釋,

首先,它們是兩個完全不同的概念,

一個Atomic的操作用於非Volatile的變量上,是不會把變量儲在主記憶體(main memory)。

所以其他thread或其他task在存取同一個非Volatile的變量時,

是有可能不會在主記憶體(main memory)見到該變量的值。

假如在一個多個task同時存取同一個變量時,

就必需要將變量加上Volatile以確保它在主記憶體(main memory)內的可見性。

否則就要透過synchronization來應付剛才的問題,

因為synchronization也可以將變量的值帶到主記憶體(main memory)。


CC BY-NC-ND 2.0 授权