饿汉式
//final修饰类,防止子类去重写,破坏单例
//如果实现了序列化接口,可以添加一个readResovle方法返回旧对象,来防止反序列化创建新对象破坏单例
public final class SingletonBean implements Serializable {
//构造器私有防止外部类通过new新对象,但是又不能防止通过反射来创建新对象
private SingletonBean(){}
//静态成员变量初始化操作是在类加载阶段完成的,类加载阶段是由jvm来保证代码的线程安全性,所以下面这个语句没有现成安全问题
private final static SingletonBean INSTANCE = new SingletonBean();
public static SingletonBean getInstance() {
return INSTANCE;
}
public Object readResovle() {
return INSTANCE;
}
}
枚举单例
/**
* 1.枚举类中每一个对象都是单例的
* 2.枚举单例在创建时候不会有线程安全问题,因为是静态成员变量的初始化操作是在类加载阶段完成的
* 3.枚举单例,反射也破坏不了
* 4.枚举单例,反序列化也无法创建新对象
* 5.枚举单例属于饿汉式
* 6.枚举单例如果想加入一些单例创建时的初始化逻辑可以通过添加构造方法,将逻辑加入到构造方法中
*/
public enum SingletonEnum {
INSTANCE;
}
静态内部类来创建单例-懒汉式
public class Singl