Java之volatile的作用 && volatile與synchronized的區別

爲了提高程序的運行效率,編譯器會自動對其進行優化,把經常被訪問的變量緩存起來,程序在讀取這個變量時會直接從緩存中讀取,而不會從內存中讀取

當遇到多線程時,變量的值可能因爲別的線程而改變,而緩存的值不會相應改變,從而造成應用程序讀取的值和實際的變量值不一致

volatile是用來修飾被不同線程訪問和修改的變量
被volatile修飾的變量,系統每次用到它時都是直接從對應的內存中提取,而不會利用緩存
使用了volatile後,所有線程在任何時候所看到變量的值都是相同的

需要注意的是:
volatile只能保證可見性,不能保證操作的原子性
而synchronized既可以保證可見性,又可以保證原子性
所以說,volatile不能代替synchronized,

最後,volatile與synchronized的區別如下:

  1. volatile用來修飾變量的,保證直接讀取內存的值;而synchronized是鎖住當前變量,保證同一時刻只有一個線程訪問該變量
  2. volatile只能用來修改變量,而synchronized可以用來修飾變量和方法
  3. volatile只能保證可見性,而synchronized可以保證可見性和原子性
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章