单例设计模式的实现方式:1.立即加载/“饿汉模式” 2.延迟加载/“懒汉模式” 3.使用静态内部类方式实现 4.使用反序列化与序列化方式实现 5.使用enum数据类型实现
一、立即加载/“饿汉模式”
public class MySingleton{ private static MySingleton mySingleton = new MySingleton(); private MySingleton(){ } public static MySingleton getnstance(){ return mySingleton; } }
二、延迟加载/“懒汉模式”
public class MySingleton{ private static MySingleton mySingleton; private MySingleton(){ } public static MySingleton getInstance(){ if(mySingleton != null){ }else{ mySingleton = new MySingleton(); } return mySingleton; } }
2.1 延迟加载/“懒汉模式”的缺点
在多线程中,懒汉模式会创建出“多例”。
2.2懒汉模式的解决方案
1)方法上声明synchronized关键字
public class MySingleton{ private static MySingleton mySingleton; private MySingleton(){ } synchronized public static MySingleton getInstance(){ if(mySingleton != null){ }else{ mySingleton = new MySingleton(); } return mySingleton; } }
缺点:整个方法上锁的方法效率太低了
2)使用同步代码块
public class MySingleton{ private static MySingleton mySingleton; private MySingleton(){ } public static MySingleton getInstance(){ synchronized (MySingleton.class){ if(mySingleton != null){ }else{ mySingleton = new MySingleton(); } } return mySingleton; } }
缺点:效率依然比较低
3) 使用DCL双重检查锁机制
public class MySingleton{ private static MySingleton mySingleton; private MySingleton(){ } public static MySingleton getInstance(){ if(mySingleton != null){ }else{ synchronized (MySingleton.class){ if(mySingleton == null){ mySingleton = new MySingleton(); } } } return mySingleton; } }
优点:既解决了懒汉模式的线程安全问题,又提高了synchronized的效率低下问题。
未完待续。。。