爲什麼volatile在併發下也是線程不安全的

volatile修飾的變量在各個線程的工作內存中不存在一致性的問題(在各個線程工作的內存中,volatile修飾的變量也會存在不一致的情況,但是由於每次使用之前都會先刷新主存中的數據到工作內存,執行引擎看不到不一致的情況,因此可以認爲不存在不一致的問題),但是java的運算並非原子性的操作,導致volatile在併發下並非是線程安全的。

 

最簡單的例子就是多線程爲一個變量連續賦值 每次做到 i++的問題。在進行加一的操作過程中,volatile關鍵字保證了變量i的值當前是正確的,但是在執行+1操作的指令的過程中,其他線程已經把i的值加大了,此時操作棧頂的值就變成了過期的數據。

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