volatile的原理及其使用

volatile表示類型修飾符,用於在多線程中共享變量,在對變量的原子性操作時,保持變量同步。在Java中,synchonized是一個比較重量級的操作,對系統性能有較大的影響;而Volatile是輕量級的synchronized,它在多線程中保證共享變量的“可見性”。

使用方式及場景

1.防止重排序。例如實例化一個對象的步驟,(1)分配內存空間(2)初始化對象(3)將內存地址賦值給對象的引用,但操作系統可以對指令進行重排序可能會變成如下流程,(1)分配內存空間(2)將內存地址賦值給對象的引用(3)初始化對象。此時爲了防止重排序,我們需要將變量設置成volatile類型的變量。

2.實現可見性。在多線程中對變量進行賦值時,A線程操作變量對B線程可見修改volatile變量時會強制將修改後的值刷新的主內存中,其他線程工作內存中對應的變量值失效。

3.實現原子性。volatile只保持對變量讀/寫的原子性,例如i++操作,實際爲賦值後再加一,既有讀又有寫,

不能保持原子性,需要另外加鎖Synchronized控制。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章