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更簡潔。