单例模式是一种创建型设计模式、当我们写程序时遇到某个类在全局应用中需要经常被用到且这个类比较大,我们就可以考虑使用单例模式进行设计,减轻GC压力提高响应速度。比如线程池、数据库连接池等都可以使用单例进行设计。比如Spring的IOC也用到了单例模式。
单例模式的设计主要有这么几个重点
/** * 饿汉饿汉,太饿了所以一开始就创建好实例初始化进内存了 * 利用类加载机制避开了多线程安全问题 */ public class Singleton { private static final Singleton singleton = new Singleton(); private Singleton(){} private static Singleton getInstance(){ return singleton; } } 复制代码
/** * 懒汉懒汉太懒了,等到别人访问它它在创建对象 * 考虑多线程安全问题,使用synchronized同步方法解决 */ public class Singleton { private static Singleton singleton = null; private Singleton(){} private static synchronized Singleton getInstance(){ if(singleton == null){ singleton = new Singleton(); } return singleton; } } 复制代码
public class Singleton { private static class Holder{ private static final Singleton instance = new Singleton(); } private Singleton(){} private static Singleton getInstance(){ return Holder.instance; } } 复制代码
public class Singleton { private Singleton() {} private volatile static Singleton singleton = null; public static Singleton getInstance() { if (singleton == null) { synchronized (Singleton.class){ if(singleton == null){ singleton = new Singleton(); } } } return singleton; } } 复制代码