volatile其實可以簡單的理解爲是java的一把弱鎖(相當於synchronize來講)
下面就說下volatile的作用:
- 使用volatile修飾變量,確保這個被修飾的變量的一個可見性;
- volatile變量弱於synchronize,是一把弱化的鎖;
- volatile修飾的變量只確保了變量的可見性,並不能確保像加鎖那樣的原子性;
- 使用volatile修飾的變量的操作不會與其他內存中的操作進行重排序(一些編譯器/虛擬機會對一些沒有語義的代碼進行重排序)
- volatile變量不會被緩存到寄存器或者其他的處理器不可見的地方,這樣我們讀取volatile類型的變量時總是能讀取到最新返回的值;
什麼時候需要用到:
- 對變量的更新操作不依賴於當前變量的值,或者能確保只有單線程更新變量的值;
- 在訪問變量時不需要加入鎖
- 變量不會與其他狀態變量納入到不變性的條件中;