1.使用volatile白能量作為狀態(tài)標(biāo)志则酝。在該場景中,應(yīng)用程序的某個狀態(tài)由一個線程設(shè)置,其他線程會讀取該狀態(tài)并作為下一步計算依據(jù)。這是適用volatile變量作為同步機(jī)制的好處是一個線程能夠“通知”另外一個線程某個事件的發(fā)生孕似,而這些線程有無需因此而使用鎖,避免了鎖的開銷和相關(guān)問題刮刑。
2.使用volatile保障可見性喉祭。
3.使用volatile代替鎖。當(dāng)多個線程共享一個變量(而非一組變量)時雷绢,通常需要使用鎖來保障對這些變量的更新操作的原子性泛烙,以避免數(shù)據(jù)不一致。利用volatile關(guān)鍵字寫的原子性翘紊,將這一組狀態(tài)變量封裝成一個對象胶惰,將更新操作通過新建對象并將該對象賦值給volatile變量來實現(xiàn)。
4.實現(xiàn)簡易版讀寫鎖霞溪。通過volatile變量和鎖的混合使用實現(xiàn);鎖保障寫操作的原子性中捆,volatile保證讀操作的可見性鸯匹。但這種讀寫鎖允許線程可以讀取到共享變量的非最新值。
public class Counter{
private volatile long count = 0;
public long value(){
return count;
}
public void increment{
synchorized(this){
count++;
}
}
}