常规的单例模式大致有一下几种:
- 懒汉式:第一次访问单例类的实例才创建
- 饿汉式:利用classloder机制避免多线程同步问题,在类加载的时候就进行实例化
- 静态内部类:利用classloder机制避免多线程同步问题,等到第一次要访问单例类实例的时候才会创建。(吸收了懒汉和饿汉的优点)
- 枚举类:JDK1.5之后提供了枚举类,避免多线程同步问题,支持序列化机制,防止多次产生对象。
- 双重校验锁:利用synchronized来实现,进入方法后先检查实例是否存在,不存在再进入同步块再判断。(可以参考网上)
在实际开发中,强烈推荐使用后两种,其他的进行比较和理解就可以了。
静态内部类代码实现
public class Singleton {
private static class SingletonHolder {
private static final Singleton instance= new Singleton();
}
private Singleton (){}
public static final Singleton getInstance() {
return SingletonHolder.instance;
}
}
枚举类代码实现
public enum Singleton {
//定义一个枚举的元素,它就代表了Singleton的一个实例
uniqueInstance;
//行为方法
public void singletonOperation(){
//功能处理
}
}
上述知识部分学习于网上网友,总结吸收。不必多记,只记所需。