第一层检查是判断实例是否已经被创建
过了第一层检查后就进入synchronized,同步代码块,
在同步代码块中再次检查,防止有多个线程同时进入同步代码块。
实例变量需要用volatile修饰,这样多个线程才能看见
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; }}