单例模式(Singleton):即某个类在整个系统中只能有一个实例对象可被获取或使用的代码模块
单:唯一
例:实例
要点:
- 某个类只能有一个实例:构造器私有化
- 它必须自行创建这个实例:含有一个该类的静态变量来保存这个唯一的实例
- 它必须自行向整个系统提供这个实例:对外提供获取该实例对象的方式,有两种(1、直接暴露;2、用静态变量get方法获取)
几种常见形式:
饿汉式创建:直接创建对象,不存在线程安全问题
- 直接实例化饿汉式(简洁直观)
- 枚举式(最简洁)
- 静态代码块饿汉式(适合复杂实例化)
懒汉式创建:
- 线程不安全(适用于单线程)
- 线程安全(适用于多线程)
- 静态内部类形式(适用于多线程)
上代码:
饿汉1:直接实例化
饿汉2:枚举式
饿汉3:静态代码块
使用场景:单例中存在私有成员变量,需构造赋值,可在静态代码块中读取配置文件,构造单例
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
懒汉1:线程不安全
测试:在初始化时让线程睡眠1s(模拟效果)
懒汉2:线程安全
懒汉3:静态内部类形式