(1)volatile是輕量級的synchronized,它在多處理器開發中保證了共享變量的“可見性”,但無法保證“原子性”。
(2)volatile不會引起線程上下文的切換,在使用恰當的情況下,比synchronized的使用和執行成本更低.
Volatile不需要加鎖,比Synchronized更輕量級,並不會阻塞線程(volatile不會造成線程的阻塞;synchronized可能會造成線程的阻塞。)
(3)只能在類屬性聲明處才能使用volatile,局部變量聲明爲volatile會報錯。
(4)應避免在32位的JVM上將double、long型的屬性聲明成volatile,因爲在32位JVM上訪問一個double或long型的變量值需要進行兩步操作,若要安全地訪問它們的值,原子性(通過synchronized)也是必要的。
可以藉助final創建一個不可變且線程安全的類