懒加载模式 (使用双重检查锁定)
1、双重检查锁定(double checked locking)通常用于延迟初始化单例对象,以提高性能避免不必要的同步

2、我们首先检查instance是否为null如果是,我们同步并再次检查instance是否为null,如果仍为null,我们才创建新的实例

3、这样既能确保线程安全地创建实例,也能保证仅创建单个实例,同时最大程度地减少同步的性能开销

4、volatile