单例模式的特点:
- 单例类只能有一个实例。
- 单例类必须自己创建自己的唯一实例。
- 单例类必须给所有其他对象提供这一实例。
实现单例模式总结有4种方法
1)传说中的饿汉式
饿汉也就是很饥渴,很想快速占有一切,所以饿汉单例就是在类初始化的时候就将单例对象创建了。
2)双重检查加锁
这种方式我以前自己在优化代码的时候用过,但不知道这就是传说中的双重检查加锁,JDK1.5之后可以用,但效率也不是很高。主要是不对单例方法加锁,而是在方法内部加锁,并且锁内部再加一层判断。
- if(instance == null){
- //同步块,线程安全的创建实例
- synchronized (Singleton.class) {
- //再次检查实例是否存在,如果不存在才真正的创建实例
- if(instance == null){
- instance = new Singleton();
- }
- }
- }
3)Lazy initialization holder class模式
主要利用类级内部类来实现延迟加载,然后由JVM保证线程安全
- public class Singleton {
- private Singleton(){}
- /**
- * 类级的内部类,也就是静态的成员式内部类,该内部类的实例与外部类的实例
- * 没有绑定关系,而且只有被调用到时才会装载,从而实现了延迟加载。
- */
- private static class SingletonHolder{
- /**
- * 静态初始化器,由JVM来保证线程安全
- */
- private static Singleton instance = new Singleton();
- }
- public static Singleton getInstance(){
- return SingletonHolder.instance;
- }
- }
4)利用枚举实现
这个不想多说,自己可以上百度查查,说多了大家接受不了
详细可以参考:http://blog.csdn.net/m13666368773/article/details/7679343