安庆大理运城常德铜陵江西
投稿投诉
江西南阳
嘉兴昆明
铜陵滨州
广东西昌
常德梅州
兰州阳江
运城金华
广西萍乡
大理重庆
诸暨泉州
安庆南充
武汉辽宁

设计模式之单例模式

1月1日 辞凤阙投稿
  单例设计模式理解起来非常简单。一个类只允许创建一个对象(或者实例),那这个类就是一个单例类,这种设计模式就叫单例模式。使用场景处理资源访问冲突
  下面的示例中如果每个类都创建一个Logger实例,就可能造成日志内容被覆盖的情况。publicclassLogger{privateFileWpublicLogger(){FilefilenewFile(log。txt);writernewFileWriter(file,true);true表示追加写入}publicvoidlog(Stringmessage){writer。write(mesasge);}}publicclassUserController{privateLoggerloggernewLogger();publicvoidlogin(Stringusername,Stringpassword){。。。省略业务逻辑代码。。。logger。log(usernamelogined!);}}publicclassOrderController{privateLoggerloggernewLogger();publicvoidcreate(OrderVoorder){。。。省略业务逻辑代码。。。logger。log(Createdanorder:order。toString());}}表示全局唯一类
  如果有些数据在系统中只应保存一份,那就比较适合设计为单例类。比如,配置信息类,全局ID生成器等。如何实现一个单例?
  要实现一个单例,我们要考虑以下几点:构造函数需要是private访问权限的,这样才能避免外部通过new创建实例;考虑对象创建时的线程安全问题;考虑是否支持延迟加载;考虑getInstance()性能是否高(是否加锁)。饿汉式publicclassSingleton{privatestaticfinalSingletoninstancenewSingleton();privateSingleton(){}publicstaticSingletongetInstance(){}}懒汉式
  懒汉式相对于饿汉式的优势是支持延迟加载。但缺点也很明显,因为使用了synchronized关键字导致这个方法的并发度很低。如果这个单例类偶尔会被用到,那这种实现方式还可以接受。但是,如果频繁地用到,就会导致性能瓶颈,这种实现方式就不可取了。publicclassSingleton{privatestaticSprivateSingleton(){}publicstaticsynchronizedSingletongetInstance(){if(instancenull){instancenewSingleton();}}}双重检测
  这是一种既支持延迟加载、又支持高并发的单例实现方式。publicclassSingleton{privatestaticSprivateSingleton(){}publicstaticSingletongetInstance(){if(instancenull){synchronized(Singleton。class){此处为类级别的锁if(instancenull){instancenewSingleton();}}}}}
  在java1。5以下instancenewSingleton();有指令重排问题,需要给instance成员变量加上volatile关键字,java1。5之后不会再这个问题。静态内部类
  这种方式利用了Java的静态内部类,有点类似饿汉式,但又能做到了延迟加载。
  当外部类Singleton被加载的时候,并不会创建SingletonHolder实例对象。只有当调用getInstance()方法时,SingletonHolder才会被加载,这个时候才会创建instance。insance的唯一性、创建过程的线程安全性,都由JVM来保证。所以,这种实现方法既保证了线程安全,又能做到延迟加载。publicclassSingleton{privateSingleton(){}privatestaticclassSingletonHolder{privatestaticfinalSingletoninstancenewSingleton();}publicstaticSingletongetInstance(){returnSingletonHolder。}}枚举
  这是一种最简单的实现方式,基于枚举类型的单例实现。这种实现方式是通过Java枚举类型本身的特性,保证了实例创建的线程安全性和实例的唯一性。publicenumIdGenerator{INSTANCE;privateAtomicLongidnewAtomicLong(0);publiclonggetId(){returnid。incrementAndGet();}}如何实现线程唯一的单例?
  上面的单例类对象是进程唯一的,一个进程只能有一个单例对象。那如何实现一个线程唯一的单例呢?
  假设IdGenerator是一个线程唯一的单例类。在线程A内,我们可以创建一个单例对象a。因为线程内唯一,在线程A内就不能再创建新的IdGenerator对象了,而线程间可以不唯一,所以,在另外一个线程B内,我们还可以重新创建一个新的单例对象b。
  我们通过一个ConcurrentHashMap来存储对象,其中key是线程ID,value是对象。这样我们就可以做到,不同的线程对应不同的对象,同一个线程只能对应一个对象。实际上,Java语言本身提供了ThreadLocal工具类,可以更加轻松地实现线程唯一单例。publicclassIdGenerator{privateAtomicLongidnewAtomicLong(0);privatestaticfinalConcurrentHashMapLong,IdGeneratorinstancesnewConcurrentHashMap();privateIdGenerator(){}publicstaticIdGeneratorgetInstance(){LongcurrentThreadIdThread。currentThread()。getId();instances。putIfAbsent(currentThreadId,newIdGenerator());returninstances。get(currentThreadId);}publiclonggetId(){returnid。incrementAndGet();}}
投诉 评论

立冬气温骤降,老年人脑梗容易复发!记住这5点,八成可预防立冬如期而至,朋友圈被各种雪景霸屏了,接下来一场大的寒潮将席卷大江南北,气温骤降是各地即将发生的大概率事件。气象部门也预测,今年的冬天可能要比往年更加寒冷。而每年冬天,医院的神……阿里丑闻不断,马云高位变现,人民日报批评,人设崩塌不值得同情从没有马云时代,只有时代中的马云!这是人民日报给马云的最终评价。1999年,还是英语教师的马云,带领17罗汉在杭州创办了阿里巴巴,在孙正义2000万美金的支持下,经过二十……苹果要涨价了?iPhone13将提高售价芯片费用成本更高最近随着iPhone13的预售上架,iphone系列的产品也再一次被推上了高潮。纵观苹果的发展史,从Apple于8年前发布了第一部iphone一代,一直到如今的iPhone13……薇娅被罚,会对电商造成什么影响呢?每日一读薇娅被罚,会对电商造成什么影响呢?我想结合一篇报告,是东吴证券【吴劲草,人称草叔】的《直播电商的蜜糖与砒霜》来聊一聊。在谈薇娅被罚的同时,我想再提几个事儿:去年的……有哪些好的家用跑步机推荐?想买台跑步机家用的,哪个牌子好?立久佳(LIJIUJIA)跑步机,家用折叠、静音多功能健身运动器材、采用10。1吋彩屏。网上的JD900跑步机,其价格为1999元RMB。……iPhoneXR用什么壁纸好看?壁纸用到没灵感了,可以试试小众壁纸,搭配得好效果也会很出圈。小众壁纸是我很爱收集的类别,经常在各个平台收罗壁纸,收获颇丰。收藏里面比较有特色的是手绘插画,暂且称之为……丐帮凉透了么(中概股深度估值分析)最近这段时间中概互联又逐渐跌下来了,净值逼近前低,很多人不太淡定,留言区也是各路提问,亏那么多咋办呀中概股是黎明前夕还是下跌中继呢?先说几个观点哈:首先第一问……千元新机Realme真我Q3系列值不值得买,亮点槽点都在这里上个月,也就是4月29日,Realme正式首发了真我Q3系列,包括Q3i,Q3和Q3Pro杀入千元手机市场。其中Q3i售价999元起;Q3售价1299元起;Q3Pro售价159……设计模式之单例模式单例设计模式理解起来非常简单。一个类只允许创建一个对象(或者实例),那这个类就是一个单例类,这种设计模式就叫单例模式。使用场景处理资源访问冲突下面的示例中如果每个类都创建……很多人说为什么手机厂商不出可拆卸电池?万能充为什么被淘汰?可拆卸电池和万能充被淘汰的因素有很多,就拿方便性这方面来讨论。现在随着科技的发展,所有的高科技不是越来越向方便性发展,像无人驾驶什么的,人脸识别不比以前输入什么什么什么好……蓝牙耳机怎么选这几款耳机高性价比音质也超乎想象都值得你入手现在人们出门都习惯戴一款蓝牙耳机,不但可以让你享受到优美的音乐,而且可以让你更加的靓丽,有个性,但是,现在的耳机市场良莠不齐,各价位各性能的耳机随处可见,给各位去选择合适的耳机……人民日报批通信套餐乱象套餐升级容易降档难前日,人民日报刊文揭露了通信套餐乱象,包括免流套餐名不符实、营销电话诱导消费、套餐升级容易降档难等情况。文章指出,运营商推出的免流卡等服务,宣称用户每月只需支付十几元,就……
骆驼股份公司12V锂电辅助电池已经拿到多个厂商的定点Python3入门由site模块添加的常量自动驾驶商业化运营按下快进键江苏省发布省级新能源汽车充(换)电运营管理办法罗永浩,五十而知天命vivo全新X系列旗舰曝光7英寸2KE5屏全焦段四摄36氪首发机器人视觉服务商领湖智能完成数百万人民币天使轮融资素诺C3pro智能可视冲牙器测评体验,洁牙护牙,自信满满阿里淘宝特价版改名淘特阵前换名,不得已还是有点慌?华为鸿蒙系统可能妥协改名?多年铺垫难道为别人做了嫁衣?苹果StudioDisplay可在旧款Mac上启用HeySi跌价1200元,2K屏零广告系统IP68防水,骁龙888旗舰特别的礼物同程艺龙2021年第三季度业绩稳健增长,持续创造社会价值深圳护照加急材料秋雨绵绵,微凉的夜有没有什么好用的美白精华?这两款不仅性价比高,效果也明显我敬佩的一个人第三节ampnbsp解放战争的胜利发展wellage唯拉珠黄金抗皱精华液多少钱专柜价格快乐的童年时光氧丽可丝牛奶卸妆乳,拒绝油腻刺激卸妆追随你的脚步性爱年龄阶段的需求是不一样的吗?

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找七猫云易事利