单例模式,即java类不对外提供构造方法,在类加载的时候创建一个实例化的对象,或者提供一个方法,在方法中作出限制,保证例化对象的创建全局只有唯一一个。其好处在于可以节约系统资源,在资源共享的情况下,避免由于资源操作时导致的性能或损耗等。如日志文件,应用配置。在控制资源的情况下,方便资源之间的互相通信。如线程池等。一般可以用于网站的计数器、web应用的日志、配置对象的读取、打印机、任务管理器、数据库连接池。其具体代码实现可以分为饿汉式和懒汉式。
/** * 饿汉式 */ public class Singleton01 { public static final Singleton01 instance = new Singleton01(); private Singleton01(){ } }
/** * 饿汉式 */ public class Singleton02 { public static final Singleton02 instance; static { instance = new Singleton02(); } private Singleton02(){ } }
/** * 饿汉式 */ public enum Singleton03 { INSTANCE }
/** * 懒汉式: 存在线程安全问题 */ public class Singleton04 { private static Singleton04 instance; private Singleton04(){ } public static Singleton04 getInstance(){ if (instance == null){ instance = new Singleton04(); } return instance; } }
/** * 懒汉式: 解决线程安全问题 */ public class Singleton05 { private volatile static Singleton05 instance; private Singleton05(){ } public static Singleton05 getInstance(){ if (instance == null){ synchronized (Singleton05.class){ instance = new Singleton05(); } } return instance; } }
/** * 懒汉式: 内部类 */ public class Singleton06 { private Singleton06(){ } private static class Inner{ private static final Singleton06 instance = new Singleton06(); } public static Singleton06 getInstance(){ return Inner.instance; } }