android進階4step1:Android拓展——volatile 關鍵字
阿新 • • 發佈:2019-01-04
volatile 關鍵字
1.volatile 的作用?
在 Java 記憶體中,有主 memory 和每個執行緒各自的memory。為了提高效能,執行緒訪問的都是其所在memory 中變數的副本。這樣就會容易造成在某一個時刻,同一個變數在其 memory 和主 memory,或者其他 memory 中變數值不一致的現象。volatile 正是為了解決這個問題,用 volatile 宣告的變數,使用時都會從主 memory 中取值,保證了執行緒中訪問的都是 volatile變數的最新值。
2.volatile 與 sychronized 區別?
在訪問 volatile
- 1) volatile 是變數修飾符,而 synchronized 則作用於一段程式碼或方法;
- 2) volatile 一般情況下不能代替 sychronized,因為 volatile 不能保證操作的原子性,
- 比如 volatile int i = 0,即使之後只是 i++,volatile 也只能保證他們操作的 i 是同一塊記憶體,但不能保證 i++操作。
3.volatile 缺點?
volatile的讀效能消耗幾乎與普通變數相同,但是寫操作稍慢,因為它需要在原生代碼中插入許多記憶體屏障指令來保證處理器不發生亂序執行。