1. 程式人生 > >android進階4step1:Android拓展——volatile 關鍵字

android進階4step1:Android拓展——volatile 關鍵字

volatile 關鍵字

1.volatile 的作用?

在 Java 記憶體中,有 memory 和每個執行緒各自的memory。為了提高效能,執行緒訪問的都是其所在memory 中變數的副本。這樣就會容易造成在某一個時刻,同一個變數在其 memory主 memory,或者其他 memory 中變數值不一致的現象volatile 正是為了解決這個問題,用 volatile 宣告的變數,使用時都會從主 memory 中取值保證了執行緒中訪問的都是 volatile變數的最新值。

2.volatile 與 sychronized 區別?

在訪問 volatile

變數時不會像 sychronized 那樣執行加鎖操作,這樣就避免了執行緒阻塞, 因此 volatile 變數可以看成是一種比 sychronized 關鍵字更輕量級的同步機制

  • 1) volatile 是變數修飾符,而 synchronized 則作用於一段程式碼或方法;
  • 2) volatile 一般情況下不能代替 sychronized,因為 volatile 不能保證操作的原子性
  • 比如 volatile int i = 0,即使之後只是 i++,volatile 也只能保證他們操作的 i 是同一塊記憶體,但不能保證 i++操作。

3.volatile 缺點?

volatile的讀效能消耗幾乎與普通變數相同,但是寫操作稍慢,因為它需要在原生代碼中插入許多記憶體屏障指令來保證處理器不發生亂序執行。