程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> volatile變量,volatile

volatile變量,volatile

編輯:JAVA綜合教程

volatile變量,volatile


關於volatile,找了一堆資料看,看完後想找一個方法去做測試,測了很久,感覺跟沒有一樣。

這本書《深入理解Java內存模型》,對volatile描述中有這樣一個比喻的說法,如下代碼所示,對a的讀寫相當於對b的同步讀寫。

public volatile int a = 0;
private int b = 0;

public synchronized int getB(){
    return b;
}

public synchronized void setB(int b){
    this.b = b;
}

也就是說,volatile只保證了讀與寫的同步,每次讀取都是得到最新值,每次寫入都是覆蓋最新值。

這就暗示著,非volatile變量的讀寫並非最新值,因為每個線程都有自己獨立的內存保存著變量的副本,並非第一時間讀取公共內存的變量。

現在,道理是明白的,接下來主要看它使用的場合和條件。

寫入值不能依賴於讀取值,例如a++,其實是一個“先讀取,再運算,後寫入”的步驟,存在了寫入值依賴於讀取值。

如果它除了讀與寫需要同步外,還需要其它同步的操作,那麼其它同步的操作,無疑肯定要借助於synchronized。如果它的讀與寫的觸發頻率遠遠高於其它同步的操作,這時候就可以考濾volatile與synchronized的並用。

關於其它的用處,可以查看這篇文章《正確使用 Volatile 變量》,今天我就先理解到這些了,有了解深入的小伙伴也分享我一下,謝謝。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved