1.使用volatile白能量作为状态标志。在该场景中,应用程序的某个状态由一个线程设置,其他线程会读取该状态并作为下一步计算依据。这是适用volatile变量作为同步机制的好处是一个线程能够“通知”另外一个线程某个事件的发生,而这些线程有无需因此而使用锁,避免了锁的开销和相关问题。
2.使用volatile保障可见性。
3.使用volatile代替锁。当多个线程共享一个变量(而非一组变量)时,通常需要使用锁来保障对这些变量的更新操作的原子性,以避免数据不一致。利用volatile关键字写的原子性,将这一组状态变量封装成一个对象,将更新操作通过新建对象并将该对象赋值给volatile变量来实现。
4.实现简易版读写锁。通过volatile变量和锁的混合使用实现;锁保障写操作的原子性,volatile保证读操作的可见性。但这种读写锁允许线程可以读取到共享变量的非最新值。
public class Counter{
private volatile long count = 0;
public long value(){
return count;
}
public void increment{
synchorized(this){
count++;
}
}
}