1.单例模式的要点
整个服务系统只有一个实例对象.
自行创建该实例对象
向整个系统提供该实例的访问方式
2.如何实现这些要点
私有的静态变量
私有的构造函数
公有的静态访问方法
3.单例模式包含饿汉式和懒汉式
饿汉式 : 一启动就加载实例对象
public class Single(){ private static Single instance = new Single(); private Single(){} public static Single getInstance(){ return instance; } }
懒汉式 : 使用时再加载
public class Single(){ private static Single instance = null; private Single(){} public static Single getInstance(){ if(instance==null){ instance = new Single(); } return instance; } }
问题 : 当多个线程访问上述代码时,会出现线程安全问题,使用同步解决线程安全问题
public class Single { private static Single instance = null; private Single() {} public static Single getInstance() { synchronized (Single.class) { if (instance == null) { instance = new Single(); } } return instance; } }
问题 : 当多个线程访问上述代码时,会出现效率低下的情况,使用双重锁解决效率低的问题
public class Single { private static Single instance = null; private Single() {} public static Single getInstance() { synchronized (Single.class) { if (instance == null) { synchronized (Single.class) { if (instance == null) { instance = new Single(); } } } } return instance; } }