把變量聲明為Volatile類型后,編譯器和運行時都會注意到這個變量是共享的,因此不會將該變量的操作和其他內存操作一起重排序。
Volatile變量不會被緩存梓寄存器或者對其他處理器不可見的地方,因此在讀取volatile類型的變量時總會返回最新的寫入值
訪問volatile變量不會執行加鎖操作,從而不會阻塞線程。因此他是比sychronized關鍵字更輕量的同步機制。
volatile變量只能確保可見性,而加鎖機制既可以保證可見性,又可以確保原子性
當且僅當符合以下條件才該使用volatile:
1.變量的寫操作不依賴變量的當前值
2.訪問變量的時候不需要加鎖
3.變量不會與其他狀態變量一起納入不變性條件中