加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

单例模式总结

发布时间:2020-12-13 20:56:32 所属栏目:百科 来源:网络整理
导读:h4 id="单例模式"单例模式 饿汉模式 初始化时间 类加载到JVM时 缺点 类加载慢 优点 获取对象速度快 避免多线程的同步问题 懒汉模式【线程不安全】 初始化时间 第一次调用方法时 缺点 第一次方法调用响应慢,因需要实例化对象。 多线程不安全 优点 节约资源

<h4 id="单例模式">单例模式

  • 饿汉模式  
    • 初始化时间   类加载到JVM时  
    • 缺点   类加载慢  
    • 优点  
      • 获取对象速度快 
      • 避免多线程的同步问题  
  • 懒汉模式【线程不安全】  
    • 初始化时间   第一次调用方法时
    • 缺点
      • 第一次方法调用响应慢,因需要实例化对象。
      • 多线程不安全
    • 优点 节约资源
  • 懒汉模式【线程安全】
    • 初始化时间 第一次方法调用时
    • 缺点 调用方法为“synchronized”加锁,性能低下,造成不必要开销
  • 双重检查【DCL】
    • 特点:volatile修饰类变量【单例变量】
    • 缺点
      • volatile或多或少性能,但为了正确性的牺牲是值得的。
      • 第一次加载响应慢一些
      • DCL失效【高并发下发生概率很小,但并不是说一定不发生】 参考[
    • 优点
      • 效率高:两次判空,减少不必要同步【线程安全的懒汉模式,每次都要加锁判空】
      • 资源利用率高   
  • 静态内部类 【推荐】

    • 初始化时间 第一次调用静态方法时,内部类完成JVM的加载时,完成外部类单例的初始化
    • 优点 保证单例,保证线程安全

         说明
         1.到此为止的单例模式,在进行反序列化时,如果不对readResolve()方法做处理,则会生成新的对象,而不再是单例    
         2.反序列化时,能创建对象实例的方法是:readObject()
      
  • 枚举单例

    • 特点:
      • 枚举天然的线程安全
      • 枚举天然的反序列化时不会创建新的对象。

说明: 1.单例模式首推:静态内部类de方式 2.其次是:DCL方式    

ps:7种单例模式的写方式  

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读