volatile与synchronized区别

2024-05-08  本文已影响0人  董董呀

相同特性

同步。
volatile与synchronized的读写都会强制刷新主内存。将业务内存数据删除,刷新主内存,同步业务缓存。

不同特性

volatile保证多线程可见,但不保证原子性
synchronized可以保证原子性

volatile的应用场景

状态标记、简单的数据共享。
例如,单例模式的双重检查。

    public  class  Singleton{
        private volatile static Singleton singleton;
        private Singleton(){};
        public static Singleton getInstance(){
            if(null == singleton){
                synchronized (Singleton.class){
                    if(null == singleton){
                        singleton = new Singleton();
                    }
                }
            }
            return singleton;   
        }
    }

在多线程场景下,只要有一个线程创建成功,对其他线程可见。

volatile的使用注意事项

上一篇 下一篇

猜你喜欢

热点阅读