volatile變量 volatile類型變量有什么特點?
volatile類型變量有什么特點?volatile變量具有synchronized的可見性屬性,但不具有原子屬性。這意味著線程可以自動發(fā)現(xiàn)volatile變量的最新值。Volatile變量可用于提供
volatile類型變量有什么特點?
volatile變量具有synchronized的可見性屬性,但不具有原子屬性。這意味著線程可以自動發(fā)現(xiàn)volatile變量的最新值。Volatile變量可用于提供線程安全,但它們只能應(yīng)用于非常有限的一組用例:多個變量之間或變量的當(dāng)前值和修改值之間沒有約束。因此,僅使用volatile不足以實現(xiàn)計數(shù)器、互斥鎖或任何具有與多個變量相關(guān)聯(lián)的不變量的類(例如“start<=end”)。為了簡單性或可伸縮性,您可能更喜歡可變變量而不是鎖。當(dāng)使用可變變量而不是鎖時,有些習(xí)慣用法更易于編碼和閱讀。此外,volatile變量不會像鎖一樣導(dǎo)致線程阻塞,因此它們很少會導(dǎo)致可伸縮性問題。在某些情況下,如果讀操作比寫操作大得多,那么volatile變量也可以提供比鎖更高的性能優(yōu)勢。如果正確使用volatile變量,則只能在有限的情況下使用volatile變量替換鎖。為了給易失性變量提供理想的線程安全,必須同時滿足以下兩個條件:●變量的寫操作不依賴于當(dāng)前值。變量不包括在與其他變量的不變量中。事實上,這些條件表明,可以寫入volatile變量的有效值獨立于任何程序的狀態(tài),包括變量的當(dāng)前狀態(tài)。第一個條件的限制阻止volatile變量用作線程安全計數(shù)器。雖然增量操作(x)看起來像一個單獨的操作,但它實際上是一個由讀-修改-寫操作序列組成的組合操作,必須以原子模式執(zhí)行,而volatile不能提供必需的原子特性。為了實現(xiàn)正確的操作,我們需要在操作過程中保持X的值不變,而volatile變量不能。(但是,如果將該值調(diào)整為僅從單個線程寫入,則可以忽略第一個條件。)大多數(shù)編程情況都會與這兩個條件中的一個發(fā)生沖突,因此volatile變量不像synchronized那樣普遍適用于線程安全。清單1顯示了一個非線程安全的數(shù)值范圍類。它包含一個不變量-下界總是小于或等于上界。
定義為volatile的變量有什么作用?
Volatile是一個類型限定符。聲明為volatile的變量表示它具有與優(yōu)化相關(guān)的特殊屬性。Volatile用于強制實現(xiàn)屏蔽可能的優(yōu)化。例如,對于具有內(nèi)存映射I/O的機器,可以將指向設(shè)備寄存器的指針聲明為指向volatile的指針,以防止編譯器通過