让处于CPU高速缓存里的数据副本在修改后立刻更新回主内存,同时,cpu每次在使用数据副本里的值时,总是去主内存中拉值,这就做到了通常所说的可见性。
volatile不保证数据的原子性,因此性能要优于synchronized,但同时也只能应用于一些特殊场景,比如:
1、状态标记量
volatile boolean inited = false;
//线程1:
context = loadContext();
inited = true;
//线程2:
while(!inited ){
sleep()
}
doSomethingwithconfig(context);
2、double check
class Singleton {
private volatile static Singleton instance = null;
privateSingleton() {
}
public static Singleton getInstance() {
if (instance==null) {
synchronized(Singleton.class) {
if(instance==null)
instance = newSingleton();
}
}
returninstance;
}
}
网友评论