一、懒汉式:
1,线程不安全
public class Singleton { private static Singleton instance; private Singleton(){}; public static Singleton getInstance(){ if (instance == null) { instance = new Singleton(); } return instance; } }
2,线程安全
public class Singleton { private static Singleton instance; private Singleton(){}; public static Singleton getInstance(){ if (instance == null) { synchronized (Singleton.class) { if (instance == null) { instance = new Singleton(); } } } return instance; } }
二、饿汉式:
public class Singleton { private static Singleton instance = new Singleton(); private Singleton(){}; public static Singleton getInstance(){ return instance; } }
三,来客登记模式
/** * Created by changquan on 2018/7/17. * 登记模式是对多个单例类进行管理的一种方法 */ class SingletonManage { private static Map singletonMap = new HashMap(); /** * 有该单例的实例存在就直接返回;没有改实例就先创建该实例在返回 * @author changquan * @param className 传入的类名 * @retrun */ public static Object getInstance(String className){ if (!singletonMap.containsKey(className)) { try { singletonMap.put(className, Class.forName(className).newInstance()); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } return singletonMap.get(className); } }
四,改进型的懒汉式(线程安全)
/** * Created by changquan on 2018/7/17. * 改进型的懒汉式(线程安全) * 原理:使用静态内部类来初始化实例,静态内部类只有当被调用的时候才开始初始化 */ public class Singleton { private Singleton(){}; private static class SingletonBuild{ private static Singleton instance = new Singleton(); } public static Singleton getInstance(){ return SingletonBuild.instance; } }