实现方式:
1. 饿汉模式
使用前创建一个单例,每次获取同一个单例
通过static静态代码块或静态变量初始化
private static Instance instance=new Instance();
public static getInstance(){
return instance;}
2. 懒汉模式
第一次使用时创建单例,后续使用获取同一个单例
第一次创建时需要加同步锁,避免多线程问题
private static Instance instance=null;
public static getInstance(){
if(null==instance){
synchronized(Object.class){
instance=new Instance();
}
return instance;
}
3. 注册模式
初始化时向map中注册对象实例,在使用时从map中获取
这种方式是Spring Ioc中获取单例的方式。
4. 枚举单例
枚举中的对象都是单例的,常用于常量对象。
补充:序列化如何保证单例
在对象中增加public Object readResolve()方法,并返回单例。该方法由jvm调用,由该方法返回的对象替换在反序列化过程中创建的对象