第一层检查是判断实例是否已经被创建
过了第一层检查后就进入synchronized,同步代码块,
在同步代码块中再次检查,防止有多个线程同时进入同步代码块。
实例变量需要用volatile修饰,这样多个线程才能看见
java
public class Singleton {
private volatile static Singleton uniqueInstance;
private Singleton() {}
public static Singleton getInstance() {
if (uniqueInstance == null) {
synchronized (Singleton.class) {
if (uniqueInstance == null) {
uniqueInstance = new Singleton();
}
}
}
return uniqueInstance;
}
}