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
对其他线程暂时不可见的现象
volatile的作用是保证instance取到的值是最新的,在你这个例子中,它是没有什么意义的,你已经加了synchronized了。这个就保证了单例。但其实你直接在getInstance方法上加synchronized更简洁。
不会产生不可见,多点看看多线程