Java volatile 個人薄見

面試中經常會問的一個問題,一個關鍵字涉及的知識點其實很多。

阿里一面被問到這個問題,答得一般,這裏梳理一下。

1.Java虛擬機內存模型

懂得這一點是理解volatile的關鍵。Java虛擬機運行時數據區圖如下(盜圖莫怪):

每個線程都會有專屬的棧區,方法區和堆區爲線程共享。

這裏有個概念區分:主內存和工作內存,主內存可以理解爲共享區域,工作內存爲線程私有區域,工作內存的數據需要從主內存中加載。

特徵:

非volatile變量,僅在第一次引用時加載

volatile變量,每一次引用都需要重新從主內存中讀取加載

2.volatile保證了主內存數據對工作內存的可見性,即工作內存每次使用的數據都是主內存最新的

3.volatile無法保證線程間的可見性,所以仍然存在線程安全問題,對於存在狀態依賴 的操作需要做同步處理,保持原子性。

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