饿汉式
单例模式的最简单实现如下:
public class Singleton implements Serializable {
    private static Singleton instance = new Singleton();
    private Singleton(){}
    public static Singleton getInstance(){
        return instance;
    }
}这种写法被称为“饿汉式”,在类加载阶段就初始化单例对象,因为是在线程出现之前实例化,所以不存在线程安全问题。
饿汉式开发效率和执行效率都比较高,也不存在线程安全问题,但饿汉式实现的单例从进程/虚拟机创建开始就占用一部分内存,并且容易被clone()方法、反射和反序列化破坏。
枚举式
正如所有被class修饰的类都是java.lang.Obejct的子类一样,所有被enum修饰的类也都是java.lang.Enum的子类,
public enum EnumSingleton {
    INSTANCE;
    private Object data;
    public Object getData() {
        return data;
    }
    public void setData(Object data) {
        this.data = data;
    }
    public static EnumSingleton getInstance(){return INSTANCE;}
}因为JDK的内部机制,枚举式单例是线程安全的,也不存在被clone()方法、反射和反序列化破坏的问题。
又因为枚举式本质上也是一种饿汉式,所以也存在从一开始就占有部分内存的问题。










