关于volatile的具体作用

为什么下面这段代码是线程不安全的。

public class Singleton {  
    private  static Singleton singleton;  
    private Singleton (){}  
    public static Singleton getSingleton() {  
    if (singleton == null) {              ①
        synchronized (Singleton.class) {  ②
        if (singleton == null) {          ③
            singleton = new Singleton();  ④
        }  
        }  
    }  
    return singleton;  
    }  
}  

而下面这段代码singleton被volatile修饰后就是线程安全的

public class Singleton {  
    private volatile static Singleton singleton;  
    private Singleton (){}  
    public static Singleton getSingleton() {  
    if (singleton == null) {              ①
        synchronized (Singleton.class) {  ②
        if (singleton == null) {          ③
            singleton = new Singleton();  ④
        }  
        }  
    }  
    return singleton;  
    }  
}  
沧海一幻觉
浏览 434回答 2
2回答

HUH函数

volatile 保证了变量修改在不同线程的可见性
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java