Java基礎-volatile作用

解決的問題:
有時爲了提高程序的運行效率,編譯器會進行優化,優化的方法就是講訪問的變量緩存起來,程序讀取這個變量時直接到緩存(例如寄存器)中來讀取,而不是去內存中讀取。這樣做的好處是提高了運行效率,但是遇到多線程時,有可能變量的值因爲其他線程改變了,緩存中的值不會改變,這樣會導致程序讀取的值和實際的值不一致。

解決:
volatile是一個類型修飾符,它是被設計用來被不同線程訪問和修改的變量。

原理:
被volatile類型修飾的變量,系統每次用到它都會到內存中去讀取,而不會利用緩存。因此,被volatile修飾的變量,所有線程在任何時候所看到的變量的值都是相同的。

注意:
volatile不能保證操作的原子性,因此,不能代替sychronized。而且使用volatile會阻止編譯器對代碼的優化,會降低程序的執行效率。不要使用volatile就儘量不要使用。

發佈了53 篇原創文章 · 獲贊 27 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章