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