设计模式
2020-06-30 18:10:07 0 举报
AI智能生成
单例模式的几种形式
作者其他创作
大纲/内容
单例模式
由来:多个线程操作同一对象,要保证对象的唯一性(实例化过程只实例化一次)
解决思路:有且只有一个实例化的过程产生实例化对象,提供返回对象的方法
解决思路:有且只有一个实例化的过程产生实例化对象,提供返回对象的方法
饿汉式:加载的时候就产生实例化对象
- 线程安全:安全
- 懒加载:没有延迟
- 性能:会一直在内存中,影响性能
懒汉式:开始加载时候为null,等需要的时候再实例化
- 线程安全:不安全,不能保证实例对象的唯一性
- 懒加载:可以延迟加载
- 性能:很好
懒汉式+同步方法:在返回方法中添加synchronized关键字
- 线程安全:安全
- 懒加载:可以懒加载
- 性能:差,synchronized会将并行会退化为串行处理
懒汉式+同步方法块:在返回方法内部中添加synchronized块
- 线程安全:不安全
- 懒加载:可以懒加载
性能:比较好
懒汉式+同步方法块:DCL(双重检查锁并发模式)
- 线程安全:安全
- 懒加载:可以懒加载
- 性能:比较好
- 问题:因为指令重排可能会引起空指针异常
为了解决这个,所以还要在初始化时候加上volatile修饰且放在最后
Holder:声明类的时候成员变量中不声明实例变量,
而是放到内部静态类中
而是放到内部静态类中
- 线程安全:安全
- 懒加载:可以懒加载
- 性能:很好,这种单例目前广泛使用
枚举:枚举相当于常量,加载的时候实例化一次
- 线程安全:安全
- 懒加载:不可以
- 性能:很好
枚举+Holder:使用枚举的安全+Holder的懒加载
- 线程安全:安全
- 懒加载:可以
- 性能:很好
0 条评论
下一页