Java - Atomic VS Volatile

MartinYeung
·
·
IPFS
·

閱讀時間: 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 授权

喜欢我的作品吗?别忘了给予支持与赞赏,让我知道在创作的路上有你陪伴,一起延续这份热忱!

MartinYeungLove life Love IT IT blog: https://ithelp.ithome.com.tw/users/20119569
  • 来自作者
  • 相关推荐

Java - Volatile keyword的介紹

Java - Thread-Safety是什麼 - Part 3

Java - Thread-Safety是什麼 – Part 2