单例模式(singleton pattern)
实际业务场景中,需要保证单服务中对象唯一而运用而生的设计模式.
-
懒汉单例
-
特征: 当对象被需要时才会创建
-
缺点: 不加锁的情况会存在线程安全问题,加锁的话会影响性能, 反射破坏了单例对象的唯一性
-
优点: 相较于饿汉单例来说,不会浪费资源
-
代码实现:
-

懒汉单例并发场景下存在线程安全问题,导致单例对象不一致(模拟场景,加了延时)
如何解决懒汉单例并发场景下导致单例对象不一致的问题(加锁)

加锁用synchorized的锁的力度太大,会影响性能.有一种方式双重校验锁比较常用

-
饿汉单例
-
特征: 对象是已经创建好的,访问时直接获取不需要判断是否对象为空
-
优点: 效率高,不存在因为线程安全问题,导致对象不一致
-
缺点: 浪费资源,反射破坏了单例对象的唯一性
-
代码实现:
-

-
静态内部单例
-
特征: 通过静态内部类创建对象,避免了资源浪费
-
优点: 避免了饿汉,懒汉单例存在的问题
-
缺点: 反射破坏了单例对象的唯一性
-

模拟反射破坏场景

-
枚举单例
-
特征: 通过枚举类保证对象的唯一性
-
优点: 避免了反射破坏唯一性的情况
-
代码实现:
-

本文介绍了单例模式在实际应用中的几种实现方式,包括懒汉式、饿汉式、静态内部类和枚举单例,分析了它们的特征、优缺点以及并发场景下的线程安全问题。着重讨论了如何优化懒汉单例以提高性能并保持线程一致性。


被折叠的 条评论
为什么被折叠?



