游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

Java设计模式之单例模式

  一、概述
  所谓单例,指的就是单实例,有且仅有一个类实例,这个单例不应该由人来控制,而应该由代码来限制,强制单例。
  单例有其独有的使用场景,一般是对于那些业务逻辑上限定不能多例只能单例的情况,例如:类似于计数器之类的存在,一般都需要使用一个实例来进行记录,若多例计数则会不准确。
  其实单例就是那些很明显的使用场合,没有之前学习的那些模式所使用的复杂场景,只要你需要使用单例,那你就使用单例,简单易理解。
  所以我认为有关单例模式的重点不在于场景,而在于如何使用。二、单例实现2。1懒汉式
  何为懒?顾名思义,就是不做事,这里也是同义,懒汉式就是不在系统加载时就创建类的单例,而是在第一次使用实例的时候再创建。
  详见下方代码示例:publicclassLHanDanli{定义一个私有类变量来存放单例,私有的目的是指外部无法直接获取这个变量,而要使用提供的公共方法来获取privatestaticLHanDanlidlnull;定义私有构造器,表示只在类内部使用,亦指单例的实例只能在单例类内部创建privateLHanDanli(){}定义一个公共的公开的方法来返回该类的实例,由于是懒汉式,需要在第一次使用时生成实例,所以为了线程安全,使用synchronized关键字来确保只会生成单例publicstaticsynchronizedLHanDanligetInstance(){if(dlnull){dlnewLHanDanli();}returndl;}}2。2饿汉式
  又何为饿?饿者,饥不择食;但凡有食,必急食之。此处同义:在加载类的时候就会创建类的单例,并保存在类中。
  详见下方代码示例:publicclassEHanDanli{此处定义类变量实例并直接实例化,在类加载的时候就完成了实例化并保存在类中privatestaticEHanDanlidlnewEHanDanli();定义无参构造器,用于单例实例privateEHanDanli(){}定义公开方法,返回已创建的单例publicstaticEHanDanligetInstance(){returndl;}}2。3双重加锁机制
  何为双重加锁机制?
  在懒汉式实现单例模式的代码中,有使用synchronized关键字来同步获取实例,保证单例的唯一性,但是上面的代码在每一次执行时都要进行同步和判断,无疑会拖慢速度,使用双重加锁机制正好可以解决这个问题:publicclassSLHanDanli{privatestaticvolatileSLHanDanlidlnull;privateSLHanDanli(){}publicstaticSLHanDanligetInstance(){if(dlnull){synchronized(SLHanDanli。class){if(dlnull){dlnewSLHanDanli();}}}returndl;}}
  看了上面的代码,有没有感觉很无语,双重加锁难道不是需要两个synchronized进行加锁的吗?
  。。。
  其实不然,这里的双重指的的双重判断,而加锁单指那个synchronized,为什么要进行双重判断,其实很简单,第一重判断,如果单例已经存在,那么就不再需要进行同步操作,而是直接返回这个实例,如果没有创建,才会进入同步块,同步块的目的与之前相同,目的是为了防止有两个调用同时进行时,导致生成多个实例,有了同步块,每次只能有一个线程调用能访问同步块内容,当第一个抢到锁的调用获取了实例之后,这个实例就会被创建,之后的所有调用都不会进入同步块,直接在第一重判断就返回了单例。
  关于锁内部的第二重空判断的作用,当多个线程一起到达锁位置时,进行锁竞争,其中一个线程获取锁,如果是第一次进入则dl为null,会进行单例对象的创建,完成后释放锁,其他线程获取锁后就会被空判断拦截,直接返回已创建的单例对象。
  不论如何,使用了双重加锁机制后,程序的执行速度有了显著提升,不必每次都同步加锁。
  其实我最在意的是volatile的使用,volatile关键字的含义是:被其所修饰的变量的值不会被本地线程缓存,所有对该变量的读写都是直接操作共享内存来实现,从而确保多个线程能正确的处理该变量。该关键字可能会屏蔽掉虚拟机中的一些代码优化,所以其运行效率可能不是很高,所以,一般情况下,并不建议使用双重加锁机制,酌情使用才是正理!
  更进一步说,其实使用volatile的目的是为了防止暴露一个未初始化的不完整单例实例,导致系统崩溃。因为创建单例实例其实需要经过以下几步:首先分配内存空间、然后将内存空间的首地址指向引用(指针),最后调用构造器创建实例,由于在第二步的时候这个引用(指针)就会变的非null,那么在第三步未执行,真正的单例实例还未创建完成的时候,一个线程过来在第一个校验中为false,将会直接将不完整的实例返回,从而造成系统崩溃。2。4类级内部类方式
  饿汉式会占用较多的空间,因为其在类加载时就会完成实例化,而懒汉式又存在执行速率慢的情况,双重加锁机制呢?又有执行效率差的毛病,有没有一种完美的方式可以规避这些毛病呢?
  貌似有的,就是使用类级内部类结合多线程默认同步锁,同时实现延迟加载和线程安全。publicclassClassInnerClassDanli{publicstaticclassDanliHolder{privatestaticClassInnerClassDanlidlnewClassInnerClassDanli();}privateClassInnerClassDanli(){}publicstaticClassInnerClassDanligetInstance(){returnDanliHolder。dl;}}
  如上代码,所谓类级内部类,就是静态内部类,这种内部类与其外部类之间并没有从属关系,加载外部类的时候,并不会同时加载其静态内部类,只有在发生调用的时候才会进行加载,加载的时候就会创建单例实例并返回,有效实现了懒加载(延迟加载),至于同步问题,我们采用和饿汉式同样的静态初始化器的方式,借助JVM来实现线程安全。
  其实使用静态初始化器的方式会在类加载时创建类的实例,但是我们将实例的创建显式放置在静态内部类中,它会导致在外部类加载时不进行实例创建,这样就能实现我们的双重目的:延迟加载和线程安全。四、使用
  在Spring中创建的Bean实例默认都是单例模式存在的。

交易案例解析我是如何从这笔黄金交易中盈利40余点本文是交易员KennethMowat以一笔成功的黄金交易为案例,说明如何确定最佳入场点、如何设置止损水平、如何计算获利目标以及如何为最大盈利制定退出策略。作为一名交易者,……宝能开拓新赛道进入新的成长区,跨界造手机近年来,企业跨界屡见不鲜。正如一位企业家所说,如果把企业的体量比作一个矩形,产品数量的多少比作企业的高度,客户关系的深浅是企业的宽度,那么涉足领域的多少则是企业的长度。借由跨界……15个10000元的AMD锐龙3600ES版处理器跑分15万之前在粉丝团里看到很多小伙伴们,对价格600多元的AMDR53600ES版处理器很有兴趣,其实就连魔改君自己也同样很有兴趣。但是搜遍了全网也找不到测试数据。普通人在……天猫8月战况胶着苹果无缘第一,华为斩获销量夺冠,红米被封神天猫8月份手机销售量数据出炉,华为和红米成绩斐然,苹果数据惨淡无缘第一,未能上榜,OPPO和vivo的销量也不尽如人意。华为因为率先研发出了5G,所以5G手机也占了优势,提前发……买到就是赚到,抚州五菱荣光直降0。055万元要现车?要省钱?要省心?要优惠?要豪礼?今天它们都来了!五菱汽车抚州国鼎销售中心店五菱荣光限时促销,截止到11月02日,最高优惠1。23,欢迎您到店开启更多惊喜福利,店铺地址:……奔驰电动大G来了没气缸的它会加倍的贵吗?虽然奔驰G级一直被视为陆地最强越野车,但在电气化面前一样显得无力,近日奔驰官方确认将在9月的慕尼黑车展中推出一款名为EQG的概念车,新车将会是奔驰G级的电动版本,量产车具体发布……特朗普政府将小米列入黑名单,称其为中国军事公司虽然任期只有六天,但是特朗普政府已决定将另一家中国电子巨头放在黑名单上:世界第三大手机制造商小米。美国国防部现将小米指定为中国军事公司,这意味着它现在容易受到特朗普禁止美国投资……拯救轻薄本USB轻松转出2。5千兆以太网如今所有轻薄本和很多主流本、游戏本都不提供RJ45有限网口,而遇到特殊情况或者WiFi网速无法满足的时候,你就需要转接器了。荷兰影音周边线材厂商Club3D就推出了两款U……北京浙江广东成为文化和科技融合示范的三极国家文化和科技融合示范基地作为文化和科技融合的关键载体,在发挥文化和科技相互促进作用、深入实施科技带动战略、增强自主创新能力等方面都拥有独特优势,不仅是文化和科技深度融合的示范……企业的数据战略(1)时代背景在大数据发展日新月异,对社会生活和经济发展产生重大影响。随着各行业的快速发展,数据的使用已经越来越重要,数据资产已成为企业的重要生产要素,在零售管理、营销管理、风……建立虚拟课堂需要考虑哪些因素?由于COVID19,远程学习在过去一年中上升到教育的最前沿,从其带来的一系列教育便捷性来看,远程教育在未来仍将会有进一步的提升空间,无论是将远程学习用作面对面课程的代替方案,还……美女博士拒高校聘请,研究硅胶胸贴,男女老少都爱用解决夏天的烦恼。文姜雪芬编辑范婷婷胸大不大不重要!没必要活在别人的审视里,小胸也一样漂亮!你是为了自己的感觉而活,舒服最重要!生意火了,徐飘飘却正在忙着和买家……
Shazam每月识别的歌曲数量超过10亿首,AppleMus今年WWDC21上,苹果向开发者推出了ShazamKit,这是一个新的框架,允许第三方开发者将歌曲识别服务纳入自己的应用程序。就在WWDC一周后,苹果公司表示,自Shazam服……小程序不是APP的附属品,它的价值不止引流距离5月20日微信正式停止小程序打开APP技术服务已经过去一周的时间,大部分利用小程序引流的商家从平台发布信息到现在一直处于焦虑的状态。小程序不能打开APP,看似只是少了一个接……爽!腾讯大佬巅峰之作Redis成长笔记,真好用感觉以前白学了Redis相信大家对于Redis第一印象都是缓存,它相比Memcache而言更加易于理解、使用和控制。但Redis作为互联网技术领域使用最为广泛的存储中间件,其实还是有很……优惠超4万,动力同级无对手,降价后的宝马3系你还绕得过吗?江湖传说,人生总绕不过一辆宝马3系。的确,在入门级豪华车型中,如果只比拼运动,那么奔驰C级、奥迪A4L还真比不过它。特别因为宝马1系用了让人埋汰的三缸机,2。0T四缸价格又快赶……潍坊百货集团深耕供应链盒马邻里进军社区电商同程生活宣布破产潍坊百货集团深耕供应链吾源食品开工7月11,山东潍坊百货集团控股的山东吾源食品供应链有限公司开业盛典在佳乐家农产品加工配送中心举行。吾源食品总经理姜小强表示,吾源食……决胜私域运营的四大核心力及成功案例分享近年来,在互联网用户增速放缓、公域流量红利逐渐消失、公域平台获客成本高企的背景下,诸多品牌开始从流量思维向留量思维转型,纷纷开启私域流量池建设,私域生态不断繁荣,私域渠道加速增……杰长老推荐唱片协奏曲及标题音乐曲目及唱片二十张(下)多音乐爱好者在面对如云烟一般的古典音乐曲目和唱片都会很苦恼,不知道该如何选择。因此自己整理了这个系列的文章,给广大音乐爱好者按系列推荐各二十张唱片方便音乐爱好者入门。主要以古典……国庆游戏本推荐惠普VICTUS光影精灵7,上手体验很nice国庆假期近在眼前,大家都准备怎么过?肯定有不少人打算宅在家7天,好好玩几天游戏,既然想玩游戏,一台好的笔记本怎么能少,最近比较火的惠普VICTUS光影精灵7看起来就挺不错的,可……Mac配置Mysql环境变量查看默认ShellechoSHELL结果:binzsh从macOSCatalina版开始,zsh(Zshell)是所有新建用户帐户的默认Shell。bash是macOSM……20212025年中国量子计算行业预测分析20002018年全球量子计算专利申请授权情况中投产业研究院发布的《20212025年中国量子计算行业深度调研及投资前景预测报告》显示,自20世纪90年代开始,各科技强国……SqlServer导入CSV文件数据桌面有个CSV文件需要导入到数据库中,保证你文件里的数据跟数据库定义的表数据类型一致前提下进行数据导入进入导入平面文件界面在需要导入的数据,右键选择任务导入平面文件……久坐人的福利,上班人的福音!腰,有这东西还好视频加载中。。。现在人们经常加班熬夜996。从早到晚都坐在椅子上。很多大公司你为了员工而购买了人体工学的座椅,但是很多普通公司呢却没有。一个好的座椅会对我们的腰部产生很好……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网