談及到volatile關鍵字,不得不提的一篇文章是:《Java 理論與實踐: 正確使用 Volatile 變量》,這篇文章對volatile關鍵字的用法做了相當精辟的闡述。
之所以要單獨提出volatile這個不常用的關鍵字原因是這個關鍵字在高性能的多線程程序中也有很重要的用途,只是這個關鍵字用不好會出很多問題。
首先考慮一個問題,為什麼變量需要volatile來修飾呢?
要搞清楚這個問題,首先應該明白計算機內部都做什麼了。比如做了一個i++操作,計算機內部做了三次處理:讀取-修改-寫入。
同樣,對於一個long型數據,做了個賦值操作,在32系統下需要經過兩步才能完成,先修改低32位,然後修改高32位。
假想一下,當將以上的操作放到一個多線程環境下操作時候,有可能出現的問題,是這些步驟執行了一部分,而另外一個線程就已經引用了變量值,這樣就導致了讀取髒數據的問題。
通過這個設想,就不難理解volatile關鍵字了。
volatile可以用在任何變量前面,但不能用於final變量前面,因為final型的變量是禁止修改的。也不存在線程安全的問題。
更多的內容,請參看::《Java 理論與實踐: 正確使用 Volatile 變量》一文,寫得很好。
出處:http://lavasoft.blog.51cto.com/62575/222076