城市直播房产教育博客汽车
汽车报价
买车新车
博客专栏
专题精品
教育留学
高考读书
房产家居
彩票视频
直播黑猫
投资微博
城市上海
政务旅游

实现单例模式的五种方式

1月9日 月依兮投稿
  头条创作挑战赛前言
  单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,使用单例模式的类只有一个对象实例。1、饿汉单例
  非多线程安全,非懒加载
  饿汉需要直接创建实例。publicclassHungryHanModel{privatestaticHungryHanModelhungryHanModelnewHungryHanModel();privateHungryHanModel(){}publicstaticHungryHanModelgetInstance(){returnhungryHanM}}
  缺点:类加载就初始化,浪费内存
  优点:没有加锁,执行效率高。还是线程安全的实例
  2、懒汉单例
  非线程安全的懒汉单例,懒加载
  懒汉单例:在类初始化不会创建实例,只有被调用时才会创建实例。publicclassLazyManMode{privatestaticLazyManModelazyManMprivateLazyManMode(){}publicstaticLazyManModegetInstance(){if(lazyManModenull){lazyManModenewLazyManMode();}returnlazyManM}}
  实例在调用getInstance才会创建实例,优点是不占内存,在单线程模式下,是安全的。但是多线程模式下,多个线程同时执行if(lazyManModenull)进行判空,结果都为true,会创建多个实例,所以上面的懒汉单例是一个线程不安全的实例。
  3、加同步锁的懒汉单例
  多线程安全,懒加载
  为了解决多个线程同时执行if(lazyManModenull)的问题,getInstance方法添加同步锁,这样多条线程排队进入了getInstance方法,只有执行完毕之后,其他线程才能进入该方法,同一时间只有一个线程才能进入该方法。publicclassLazyManModeSync{privatestaticLazyManModeSynclazyManlModeSprivateLazyManModeSync(){}publicstaticsynchronizedLazyManModeSyncgetInstance(){if(lazyManlModeSyncnull){lazyManlModeSyncnewLazyManModeSync();}returnlazyManlModeS}}
  这样配置虽然保证了线程的安全性,但是效率低,只有在第一次调用初始化之后,才需要同步,初始化之后都不需要进行同步。锁的粒度太大,影响了程序的执行效率。
  4、双重检验懒汉单例
  多线程安全,懒加载
  使用synchronized声明的方法,在多个线程访问,比如第一条线程访问时,其他线程必须等待第一条线程执行完毕之后才能访问,这样会大大的降低的程序的运行效率。这个时候在加了同步锁的懒汉模式进行锁粒度的一个优化,锁住方法中的部分代码块,优化时间。
  双重检验首先判断实例是否为空,然后使用synchronized(lazyManModeDoubleCheck。class)使用类锁,锁住整个类,执行完代码块的代码之后,新建了实例,其他代码都不走if(lazyManModeDoubleChecknull)里面,在最开始的时候程序创建对象效率会低下。而synchronized里面再次判断是否可能同时有多个线程都执行到synchronized(lazyManModeDoubleCheck。class),如果其中一条线程线程新建实例,那么其他线程的lazyManModeDoubleCheck就不为空,就不会再创建实例了。publicclassLazyManModeDoubleCheck{privatestaticLazyManModeDoubleChecklazyManModeDoubleCprivateLazyManModeDoubleCheck(){}publicstaticLazyManModeDoubleCheckgetInstance(){if(lazyManModeDoubleChecknull){synchronized(LazyManModeDoubleCheck。class){if(lazyManModeDoubleChecknull){lazyManModeDoubleChecknewLazyManModeDoubleCheck();}}}returnlazyManModeDoubleC}}
  5、静态内部类
  多线程安全,懒加载
  外部类加载时,并不会加载内部类,也就不会执行newCreateASingleInstance(),这属于懒加载。只有第一次调用getInstance()方法时才会加载CreateASingleInstance类。而静态内部类是线程安全的。
  静态内部类为什么是线程安全
  静态内部类利用了类加载机制的初始化阶段方法,静态内部类的静态变量赋值操作,实际就是一个方法,当执行getInstance()方法时,虚拟机才会加载CreateASingleInstance静态内部类,
  然后在加载静态内部类,该内部类有静态变量,JVM会改内部生成方法,然后在初始化执行方法即执行静态变量的赋值动作。
  虚拟机会保证方法在多线程环境下使用加锁同步,只会执行一次方法。
  这种方式不仅实现延迟加载,也保障线程安全。publicclassStaticInnerClass{privateStaticInnerClass(){}privatestaticclassCreateASingleInstance{privatestaticfinalCreateASingleInstanceINSTANCEnewCreateASingleInstance();}publicstaticfinalCreateASingleInstancegetInstance(){returnCreateASingleInstance。INSTANCE;}}
搜索 投诉 评论 转载

富士康鸿海深圳龙华厂,容纳42万名员工!人类有史以来最大工厂头条创作挑战赛位于深圳经济特区北部不到3平方公里的土地上,42万人的工厂,是人类有史以来最大的工厂。这庞大的人数,甚至比台湾地区的军队人数还要多。对郭台铭来说,最简单有效……参苓白术丸跟参苓健脾胃颗粒怎么选?参苓白术丸跟参苓健脾胃颗粒怎么选?两个药名字差不多,怎么选呢?参苓白术丸跟参苓健脾胃颗粒怎么选?我今天给大家从成分、功效、临床使用三个方面分析:1、成分不同……男子跑马磨裆流血染红!原来男人比女人更容易受伤?从体能上来讲,男性跑步能力普遍都明显强于女性,男性心肺功能、血红蛋白含量等决定耐力的生理因素都要优于女性,不过就受伤情况情况来讲,男性也是要多于女性,甚至在受伤部位上,也要更奇……A股国内医药电商第一股,仅有六家,或将诞生下只ampampq医药电商概念究竟是什么?医药电子商务(以下简称医药电商)是互联网医疗行业的核心变现模式之一。指的是以医药公司、医疗机构、医药信息服务提供商、银行、医药生产商、第三方机构等……英特尔拆分加速计算和图形部门,RajaKoduri重新担任首英特尔于2016年开始组建GPU团队,2017年从AMD招来了RajaKoduri并公开披露了其独立显卡发展计划,加速计算和图形部门(AXG)于2021年6月成立,截止2022……RTX40系显卡发布,接下来的显卡市场究竟如何?9月20日,英伟达在发布会上正式发布了全新的40系显卡。那么这次的新显卡究竟如何?接下来的时间又是否适合购买显卡?在看完发布会后,我有了以下的观点。这次发布会上公布了三款……快递行业保价赔付争议不断原因何在?来源:广州日报客户端近日,据媒体报道,消费者通过顺丰邮寄的一件价值1。7万元的手办被寄损,顺丰方面回复称只能赔偿500元。而该消费者称已足额保价,要求顺丰按照保价赔付或者……MicrosoftOffice将改名Microsoft365微软使用了30年的品牌名称MicrosoftOffice正式走入历史,但Office2021、OfficeLTSC以及Office365订阅方案不受影响微软为人熟知的生产……实现单例模式的五种方式头条创作挑战赛前言单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,使用单例模式的类只有一个对象实例。1、饿汉……欧洲食品安全局批准一项转基因油菜GT73的食用和饲用续申请,2022年10月6日,欧洲食品安全局(EFSA)批准一项转基因油菜GT73的食用和饲用续授权申请。EFSA转基因专家组评估后认为,没有证据表明存在新风险、暴露量变化或科学不确定……如何快速入睡,避免失眠?很多人经常和我反馈晚上失眠睡不着,焦虑,白天无精打采,到了晚上又精神抖擞,并且周而复始,异常痛苦。失眠这个事情,对想进行自我提升改变的朋友来说是头号大敌,精神不好,什么事情都不……十月,我要深情地为你歌唱十月,我要深情地为你歌唱金风送来了岁月的凉爽籽粒饱满的向日葵蓄积了充足的阳光草原上一群群牛羊膘肥体壮每片树叶都展现出万道霞光成熟的果实弥漫着淡淡的……
张柏芝大儿子青春期太叛逆,跟妈妈要完钱就挂电话,暴露真实关系杜锋利好!亚洲第一小前回国,世预赛欲双杀伊朗,全胜世界杯出线广东大胜辽宁的同时,这三个细节不容忽视,每一个都极具人情味!我们穿过春天和史贵金的庭院安卓表的质感媲美AppleWatch,有什么理由再选择苹果?福州房价五连跌,福州楼市跌落神坛,福州楼市分析第42期苹果在中国获得巨大成功,却拒不让步,中国移动直接开放所有人黄多多气质是真好!社交平台私服穿搭成学习模板,比成年人还有范Mate50系列上的HarmonyOS3。0,会有什么变化?被问及骑士是否该退役欧文球衣乐福毫无疑问,绝对地阿联陶汉林不打!周琦正式回归,杜锋截获救星,男篮迎来救世主2022第三季度全球PC出货量公布,苹果唯一正增长,联想继续
白凤水蜜桃几月成熟星座揭秘:12星座欠扁女生排行榜同学聚会最悲哀的是什么?起诉离婚律师会到单位取证么?超市店长年终工作总结现实中的我们和程德远二首家庭保洁合同一件事的启示聊客户矮个子女生扎什么发型好看韩式扎发修颜显高超好看强势股与弱势股的区别为什么弱势股不能补仓

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找江西南阳嘉兴昆明铜陵滨州广东西昌常德梅州兰州阳江运城金华广西萍乡大理重庆诸暨泉州安庆南充武汉辽宁