张三疯1dfd 2015-06-05 06:02 采纳率: 50%
浏览 1840
已采纳

求助:单例模式下volatile可见性问题

public class Singleton {
private volatile static Singleton instance = null;

private Singleton() {

}
/**
 * @return
 */
public static Singleton getInstance() {
    if (instance == null) {
        synchronized (Singleton.class) { 
            if (instance == null) { 
                instance=new Singleton();
            }
        }
    }
    return instance;
}
}
这段代码如果instance不加volatile可不可能存在instance=new Singleton();后instance
对其他线程暂时不可见的现象
  • 写回答

2条回答 默认 最新

  • lhl_lqc 2015-06-05 08:39
    关注

    volatile的作用是保证instance取到的值是最新的,在你这个例子中,它是没有什么意义的,你已经加了synchronized了。这个就保证了单例。但其实你直接在getInstance方法上加synchronized更简洁。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?