public class Singleton {
    /**
     * 如果一个字段被声明成volatile
     * java线程内存模型确保所有线程看到这个变量的值是一致的。
     */
    private volatile static Singleton singleton;

    /**
     * 构造方法私有,外部无法实例化
     */
    private Singleton() {
    }

    /**
     * 提供静态方法 供外部调用
     * 加入synchronized保证同步
     * 双重检查锁定
     * @return
     */
    public static Singleton getSingleton() {
        if (singleton == null) {
            synchronized (Singleton.class) {
                if (singleton == null) {
                    singleton = new Singleton();
                }
            }
        }

        return singleton;
    }
}