单例模式使用的场景:需要频繁的进行创建和销毁的对象、创建对象时耗时过多或耗费资源过多(即:重量级对象),但又经常用到的对象、工具类对象、频繁访问数据库或文件的对象(比如数据源、session工厂等)
1. 饿汉式(静态常量)
缺点:可能造成内存浪费
- 构造器私有化
- 类静态成员变量
- 暴露静态公共方法 getInstance

2. 懒汉式(双重检验)
- 构造器私有
- 静态 volatile 成员变量
- 双重 if+synchronized
public class Singleton {
    //构造器私有
    private Singleton() {
    }
    private static volatile Singleton instance;
    //双重检查
    public static Singleton getInstance() {
        if(instance == null) {
            synchronized (Singleton.class) {
                if(instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}3. JDK 源码分析
java.lang.Runtime 就是典型的饿汉式单例




















