单例模式(singleton pattern)
实际业务场景中,需要保证单服务中对象唯一而运用而生的设计模式.
-
懒汉单例
-
特征: 当对象被需要时才会创建
-
缺点: 不加锁的情况会存在线程安全问题,加锁的话会影响性能, 反射破坏了单例对象的唯一性
-
优点: 相较于饿汉单例来说,不会浪费资源
-
代码实现:
-
懒汉单例并发场景下存在线程安全问题,导致单例对象不一致(模拟场景,加了延时)
如何解决懒汉单例并发场景下导致单例对象不一致的问题(加锁)
加锁用synchorized的锁的力度太大,会影响性能.有一种方式双重校验锁比较常用
-
饿汉单例
-
特征: 对象是已经创建好的,访问时直接获取不需要判断是否对象为空
-
优点: 效率高,不存在因为线程安全问题,导致对象不一致
-
缺点: 浪费资源,反射破坏了单例对象的唯一性
-
代码实现:
-
-
静态内部单例
-
特征: 通过静态内部类创建对象,避免了资源浪费
-
优点: 避免了饿汉,懒汉单例存在的问题
-
缺点: 反射破坏了单例对象的唯一性
-
模拟反射破坏场景
-
枚举单例
-
特征: 通过枚举类保证对象的唯一性
-
优点: 避免了反射破坏唯一性的情况
-
代码实现:
-