當大家談論到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)。