懒汉式

第一次调用啊getInstance()方法时,再去new实例。
此时可能会产生线程安全问题。
使用双重检查锁的写法可以解决线程安全问题。
声明需要加上volatile关键字。

饿汉式

初始化的时候直接new实例。
唯一缺点,可能用不上,但是已经占用内存了。

静态内部类

在单例对象内部写一个静态内部类,内部类来new实例。
类加载的时候并不会加载内部类,只有在使用的时候才加载。
在第一次调用getInstance()方法时,由内部类来创建实例。
由JVM保证线程安全(JVM只会加载一次Class对象)。

枚举单例

高端写法,最完美的单例。
枚举类中只有INSTANCE值。
不会被反序列化,因为枚举类没有构造方法,就算拿到class文件也无法构造对象。
反序列化返回的也是这个INSTANCE值。