volatile提供了弱同步機制,用來確保將變量更新通知到其它線程。volatile變量不會被緩存在寄存器中或者對其它處理器不可見的地方,因此在讀取volatile變量時總會返回最新寫入的值。可以想象成如下語義,然而volatile是更輕量級的同步機制。volatile只能確保可見性,但不能保證原子性。也就是說不能在復合操作用volatile變量,比如i++。
public synchronized void setValue(int value){
this.value = value;
}
public synchronized int getValue(){
return value;
}
當滿足以下條件所有條件,才能使用volatile變量
1.對變量的寫入操作不依賴變量的當前值,或者你能確保只有單個線程更新變量值。
2.該變量不會與其他狀態(tài)變量一起納入不變性條件
3.在訪問變量是不需要加鎖