volatile关键字

2018-03-08  本文已影响0人  怒放的生命_浴火重生

让处于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;

    }

}

上一篇下一篇

猜你喜欢

热点阅读