美文网首页
单例模式-实战

单例模式-实战

作者: __晨风__ | 来源:发表于2020-05-16 00:54 被阅读0次

单例模式:前面的一篇文章,曾经对单例模式进行了一个基本的认知

今天通过代码来一步步优化单例模式

demo1 

demo2

所谓的懒汉式:就是使用时才会去创建;但是,该方式会有问题:如果在多线程情况下,会产生两个对象

demo3

由demo3我们可以看到,通过synchronized加锁方式,从多线程角度来看,Synchronized放到方法上会影响性能。于是我们不难想到将其放到方法里。

demo4

其实到了这一步,这种方式其实还是有问题的,当线程1和2都执行到了 if (instance == null)的判断语句(还未加锁),这种情况最后也会产生两个对象,于是,我们想到  锁里面再加一个是否为空的判断

demo5

这一步,我们实际是通过 double-checked locking (DCL) 来进行控制 ;此时,很多人都会觉得无懈可击了;从多线程角度来看,这样写的单例确实没有问题了,但从Java的类创建原理来看,可能还有问题;

从浅显简单的理解来看,就是对象还未完全创建出来,但instance变量已被赋值,此时另一个线程获取实例时,会得到instance,但它的堆空间及相关的方法还未完成时,调用实例方法就会出错。

demo6

对象的创建过程,后期会专门进行一次分享

相关文章

  • PHP完整实战23种设计模式

    前言 设计模式是面向对象的最佳实践 实战 PHP实战创建型模式 单例模式 工厂模式 抽象工厂模式 原型模式 建造者...

  • PHP 完整实战23种设计模式

    PHP实战创建型模式 单例模式 工厂模式 抽象工厂模式 原型模式 建造者模式 PHP实战结构型模式 桥接模式 享元...

  • 单例模式-实战

    单例模式:前面的一篇文章,曾经对单例模式进行了一个基本的认知 今天通过代码来一步步优化单例模式 demo1 dem...

  • 单例模式Singleton

    这是我在学习《Android源码设计模式解析和实战》过程中对单例模式作一个记录。方便以后随时翻看。单例模式是应用最...

  • Android开发学习——Day10(单例设计模式&实战:扑克游

    学习目的 1.学习单例设计模式 2.完善并练习实战项目:扑克游戏 学习过程 了解单例设计模式,并简单运用。完善之前...

  • 【设计模式】单例模式

    单例模式 常用单例模式: 懒汉单例模式: 静态内部类单例模式: Android Application 中使用单例模式:

  • Android设计模式总结

    单例模式:饿汉单例模式://饿汉单例模式 懒汉单例模式: Double CheckLock(DCL)实现单例 Bu...

  • 2018-04-08php实战设计模式

    一、单例模式 单例模式是最经典的设计模式之一,到底什么是单例?单例模式适用场景是什么?单例模式如何设计?php中单...

  • 设计模式之单例模式详解

    设计模式之单例模式详解 单例模式写法大全,也许有你不知道的写法 导航 引言 什么是单例? 单例模式作用 单例模式的...

  • Telegram开源项目之单例模式

    NotificationCenter的单例模式 NotificationCenter的单例模式分析 这种单例模式是...

网友评论

      本文标题:单例模式-实战

      本文链接:https://www.haomeiwen.com/subject/wubkohtx.html