reference to : http://blog.sina.com.cn/s/blog_4e1e357d0101i486.htmlhtml
static也是各個業務方能夠去全局修改;安全
volatile是處理多線程鎖的替代方案,對應有時須要實時的修改共享資源的變量,被volatile修復的變量的值能夠馬上被業務方取得最新的值。
不過,猛地感受,nnd,這不是同樣麼,static是靜態的,因此理論上也能夠在不一樣線程去訪問,能訪問也就是能修改,因此這裏老穆在網上搜了搜 相關的資料,把這個知識點在增強下:
變量放在主存區上,使用該變量的每一個線程,都將從主存區拷貝一份到本身的工做區上進行操做。 volatile, 聲明這個字段易變(可能被多個線程使用),Java內存模型負責各個線程的工做區與主存區的該字段的值保持同步,即一致性。 static, 聲明這個字段是靜態的(可能被多個實例共享),在主存區上該類的全部實例的該字段爲同一個變量,即惟一性。 volatile, 聲明變量值的一致性;static,聲明變量的惟一性。 此外,volatile同步機制不一樣於synchronized, 前者是內存同步,後者不只包含內存同步(一致性),且保證線程互斥(互斥性)。 static 只是聲明變量在主存上的惟一性,不能保證工做區與主存區變量值的一致性;除非變量的值是不可變的,即再加上final的修飾符,不然static聲明的變量,不是線程安全的。 下面摘自Java語言規範(Java Language Specification)的官方解釋: 1) If a field is declared static, there exists exactly one incarnation of the field, no matter how many instances (possibly zero) of the class may eventually be created. 2) A field may be declared volatile, in which case the Java Memory Model ensures that all threads see a consistent value for the variable。