标签:
1、饿汉式实现(单例对象立即加载)
例1:
/** * 饿汉式单例模式 * @author qjc */ public class SingletonDemo1 { //类初始化时立即加载这个对象(没有延时加载的优势)。加载时,天然的是线程安全的! private static SingletonDemo1 instance = new SingletonDemo1(); //构造私有防止外部创建对象 private SingletonDemo1() { } //方法没有同步,调用效率高 public static SingletonDemo1 getInstance(){ return instance; } }
小结:
如果只是加载本类,而不是要调用getInstance(),甚至永远没用调用,则会造成资源浪费
2、懒汉式实现(单例对象延迟加载)
例2:
/** * 懒汉式单例模式 * @author qjc */ public class SingletonDemo2 { //延迟加载,用的时候在创建 private static SingletonDemo2 instance; //构造私有化 private SingletonDemo2() { } //方法同步,调用效率低 public static synchronized SingletonDemo2 getInstance(){ if(instance==null){ instance = new SingletonDemo2(); } return instance; } }
小结:
3、双重检测锁实现
例3:
/** * 双重检测锁实现单例模式 * @author qjc */ public class SingletonDemo3 { //延迟加载,用的时候在创建 private static SingletonDemo3 instance; //构造私有化 private SingletonDemo3() { } //方法同步双重校验锁 public static synchronized SingletonDemo3 getInstance(){ if(instance==null){ synchronized (SingletonDemo3.class) { if(instance==null){ instance = new SingletonDemo3(); } } } return instance; } }
小结:
4、静态内部类实现方式(也是一种懒加载方式)
例4:
/** * 静态内部类实现单例模式 * 线程安全、调用效率高、实现了延时加载 * @author qjc */ public class SingletonDemo4 { //构造私有化 private SingletonDemo4() { } //final 可不加 private static class SingletonClassInstance{ private static final SingletonDemo4 instance = new SingletonDemo4(); } public static SingletonDemo4 getInstance(){ return SingletonClassInstance.instance; } }
小结:
5、使用枚举实现单例模式
例5:
/** * 使用枚举实现单例模式 * 没有延时加载 * @author qjc */ public enum SingletonDemo5 { //这个枚举元素,本身就是单例对象 INSTANCE; //添加自己需要的操作 public void singletonOperation(){ } }
小结:
标签:
原文地址:http://www.cnblogs.com/dooor/p/5297596.html