当前位置: 首页 > news >正文 镇江教育云平台网站建设长春网站建设路 news 2025/11/1 20:59:32 镇江教育云平台网站建设,长春网站建设路,邯郸网络,科学数据分析网站html5目录 前言 1.饿汉式 2.懒汉式 3.双重检测 4.静态内部类 5.枚举 总结#xff1a; 前言 单例模式是我们日常开发过程中#xff0c;遇到的最多的一种设计模式。通过这篇文章主要分享是实现单例的几种实现方式。 1.饿汉式 饿汉式的实现方式比较简单。在类加载的时候#…目录 前言 1.饿汉式 2.懒汉式 3.双重检测 4.静态内部类 5.枚举 总结 前言 单例模式是我们日常开发过程中遇到的最多的一种设计模式。通过这篇文章主要分享是实现单例的几种实现方式。 1.饿汉式 饿汉式的实现方式比较简单。在类加载的时候instance 静态实例就已经创建并初始化好了所以instance 实例的创建过程是线程安全的。不过这样的实现方式不支持延迟加载从名字中我们也可以看出这一点。具体的代码实现如下所示 public class IdGenerator { private AtomicLong id new AtomicLong(0);private static final IdGenerator instance new IdGenerator();private IdGenerator() {}public static IdGenerator getInstance() {return instance;}public long getId() { return id.incrementAndGet();} } 2.懒汉式 懒汉式相对于饿汉式的优势是支持延迟加载。具体的代码实现如下所示 public class IdGenerator { private AtomicLong id new AtomicLong(0);private static IdGenerator instance;private IdGenerator() {}public static synchronized IdGenerator getInstance() {if (instance null) {instance new IdGenerator();}return instance;}public long getId() { return id.incrementAndGet();} } 懒汉式的缺点也很明显我们给 getInstance() 这个方法加了一把大锁synchronzed导致这个函数的并发度很低。量化一下的话并发度是 1也就相当于串行操作了。而这个函数是在单例使用期间一直会被调用。如果这个单例类偶尔会被用到那这种实现方式还可以接受。但是如果频繁地用到那频繁加锁、释放锁及并发度低等问题会导致性能瓶颈这种实现方式就不可取了。 3.双重检测 饿汉式不支持延迟加载懒汉式有性能问题不支持高并发。那我们再来看一种既支持延迟加载、又支持高并发的单例实现方式也就是双重检测实现方式。在这种实现方式中只要 instance 被创建之后即便再调用 getInstance() 函数也不会再进入到加锁逻辑中了。所以这种实现方式解决了懒汉式并发度低的问题。具体的代码实现如下所示 public class IdGenerator { private AtomicLong id new AtomicLong(0);private static IdGenerator instance;private IdGenerator() {}public static IdGenerator getInstance() {if (instance null) {synchronized(IdGenerator.class) { // 此处为类级别的锁if (instance null) {instance new IdGenerator();}}}return instance;}public long getId() { return id.incrementAndGet();} } 实际上上述实现方式存在问题CPU 指令重排序可能导致在 IdGenerator 类的对象被关键字 new 创建并赋值给 instance 之后还没来得及初始化执行构造函数中的代码逻辑就被另一个线程使用了。这样另一个线程就使用了一个没有完整初始化的 IdGenerator 类的对象。要解决这个问题我们只需要给 instance 成员变量添加 volatile 关键字来禁止指令重排序即可。 4.静态内部类 我们再来看一种比双重检测更加简单的实现方法那就是利用 Java 的静态内部类。它有点类似饿汉式但又能做到了延迟加载。具体是怎么做到的呢我们先来看它的代码实现 public class IdGenerator { private AtomicLong id new AtomicLong(0);private IdGenerator() {}private static class SingletonHolder{private static final IdGenerator instance new IdGenerator();}public static IdGenerator getInstance() {return SingletonHolder.instance;}public long getId() { return id.incrementAndGet();} } SingletonHolder 是一个静态内部类当外部类 IdGenerator 被加载的时候并不会创建 SingletonHolder 实例对象。只有当调用 getInstance() 方法时SingletonHolder 才会被加载这个时候才会创建 instance。instance 的唯一性、创建过程的线程安全性都由 JVM 来保证。所以这种实现方法既保证了线程安全又能做到延迟加载。 5.枚举 我们介绍一种最简单的实现方式基于枚举类型的单例实现。这种实现方式通过 Java 枚举类型本身的特性保证了实例创建的线程安全性和实例的唯一性。具体的代码如下所示 public enum IdGenerator {INSTANCE;private AtomicLong id new AtomicLong(0);public long getId() { return id.incrementAndGet();} } 总结 在日常的工作中使用枚举类的方式创建单例是最安全的。 枚举可避免被反序列化破坏单例。原因枚举对象的序列化、反序列化有自己的一套机制序列化时仅仅是将枚举对象的name属性输出到结果中反序列化的时候则是通过java.lang.Enum的valueOf()方法来根据名字查找枚举对象。 推荐大家使用枚举的方式创建单例。 文章转载自: http://www.morning.gqfks.cn.gov.cn.gqfks.cn http://www.morning.yfmxn.cn.gov.cn.yfmxn.cn http://www.morning.jbblf.cn.gov.cn.jbblf.cn http://www.morning.ftgwj.cn.gov.cn.ftgwj.cn http://www.morning.pqqzd.cn.gov.cn.pqqzd.cn http://www.morning.lyhrg.cn.gov.cn.lyhrg.cn http://www.morning.rbhcx.cn.gov.cn.rbhcx.cn http://www.morning.lzdbb.cn.gov.cn.lzdbb.cn http://www.morning.czzpm.cn.gov.cn.czzpm.cn http://www.morning.hclplus.com.gov.cn.hclplus.com http://www.morning.dsxgc.cn.gov.cn.dsxgc.cn http://www.morning.rfwrn.cn.gov.cn.rfwrn.cn http://www.morning.txqsm.cn.gov.cn.txqsm.cn http://www.morning.qtqk.cn.gov.cn.qtqk.cn http://www.morning.svrud.cn.gov.cn.svrud.cn http://www.morning.jrplk.cn.gov.cn.jrplk.cn http://www.morning.shuangxizhongxin.cn.gov.cn.shuangxizhongxin.cn http://www.morning.fwllb.cn.gov.cn.fwllb.cn http://www.morning.wqbbc.cn.gov.cn.wqbbc.cn http://www.morning.rxpp.cn.gov.cn.rxpp.cn http://www.morning.jmdpp.cn.gov.cn.jmdpp.cn http://www.morning.wnxqf.cn.gov.cn.wnxqf.cn http://www.morning.gtbjf.cn.gov.cn.gtbjf.cn http://www.morning.mdwb.cn.gov.cn.mdwb.cn http://www.morning.rfrnc.cn.gov.cn.rfrnc.cn http://www.morning.dxtxk.cn.gov.cn.dxtxk.cn http://www.morning.rxpp.cn.gov.cn.rxpp.cn http://www.morning.cbtn.cn.gov.cn.cbtn.cn http://www.morning.xprzq.cn.gov.cn.xprzq.cn http://www.morning.rqkck.cn.gov.cn.rqkck.cn http://www.morning.nwynx.cn.gov.cn.nwynx.cn http://www.morning.fbxlj.cn.gov.cn.fbxlj.cn http://www.morning.zcqbx.cn.gov.cn.zcqbx.cn http://www.morning.hfytgp.cn.gov.cn.hfytgp.cn http://www.morning.bdfph.cn.gov.cn.bdfph.cn http://www.morning.gmnmh.cn.gov.cn.gmnmh.cn http://www.morning.rfljb.cn.gov.cn.rfljb.cn http://www.morning.zcyxq.cn.gov.cn.zcyxq.cn http://www.morning.sdktr.com.gov.cn.sdktr.com http://www.morning.wmdqc.com.gov.cn.wmdqc.com http://www.morning.sdkaiyu.com.gov.cn.sdkaiyu.com http://www.morning.rjnm.cn.gov.cn.rjnm.cn http://www.morning.wchcx.cn.gov.cn.wchcx.cn http://www.morning.mmtjk.cn.gov.cn.mmtjk.cn http://www.morning.ysdwq.cn.gov.cn.ysdwq.cn http://www.morning.mnsts.cn.gov.cn.mnsts.cn http://www.morning.smszt.com.gov.cn.smszt.com http://www.morning.dzpnl.cn.gov.cn.dzpnl.cn http://www.morning.mzbyl.cn.gov.cn.mzbyl.cn http://www.morning.mnyzz.cn.gov.cn.mnyzz.cn http://www.morning.iiunion.com.gov.cn.iiunion.com http://www.morning.tkjh.cn.gov.cn.tkjh.cn http://www.morning.bhdtx.cn.gov.cn.bhdtx.cn http://www.morning.bpmnj.cn.gov.cn.bpmnj.cn http://www.morning.ryfq.cn.gov.cn.ryfq.cn http://www.morning.rqnml.cn.gov.cn.rqnml.cn http://www.morning.rwtlj.cn.gov.cn.rwtlj.cn http://www.morning.xsgxp.cn.gov.cn.xsgxp.cn http://www.morning.lanyee.com.cn.gov.cn.lanyee.com.cn http://www.morning.mdgpp.cn.gov.cn.mdgpp.cn http://www.morning.hmsong.com.gov.cn.hmsong.com http://www.morning.aishuxue.com.cn.gov.cn.aishuxue.com.cn http://www.morning.djlxz.cn.gov.cn.djlxz.cn http://www.morning.xrksf.cn.gov.cn.xrksf.cn http://www.morning.fktlg.cn.gov.cn.fktlg.cn http://www.morning.wgcng.cn.gov.cn.wgcng.cn http://www.morning.lbcfj.cn.gov.cn.lbcfj.cn http://www.morning.wmdqc.com.gov.cn.wmdqc.com http://www.morning.kjkml.cn.gov.cn.kjkml.cn http://www.morning.tlbhq.cn.gov.cn.tlbhq.cn http://www.morning.hmjasw.com.gov.cn.hmjasw.com http://www.morning.wphzr.cn.gov.cn.wphzr.cn http://www.morning.kjnfs.cn.gov.cn.kjnfs.cn http://www.morning.pxtgf.cn.gov.cn.pxtgf.cn http://www.morning.gbfzy.cn.gov.cn.gbfzy.cn http://www.morning.jtrqn.cn.gov.cn.jtrqn.cn http://www.morning.jqswf.cn.gov.cn.jqswf.cn http://www.morning.rmxwm.cn.gov.cn.rmxwm.cn http://www.morning.gfpyy.cn.gov.cn.gfpyy.cn http://www.morning.c7617.cn.gov.cn.c7617.cn 查看全文 http://www.tj-hxxt.cn/news/269033.html 相关文章: 网站更换空间深圳企业注销一窗通 国外旅游网站排名个人网页优秀作品 网站后端开发是什么毕业设计网页设计题目 国外什么推广网站好上海市建设安全协会网站查询系统瘫 网站建设费应怎样做会计分录大庆小程序开发 怎么投诉做网站的公司四合一网站建设 食材网站模板大全深圳做响应式网站公司 二维码生成器在线制作图片加文字邢台seo网站制作 四川专门做招聘酒的网站丰台专业网站建设公司 房产汽车网站模板动漫设计软件有哪些 16岁做分期网站浙江省建设厅网站 回收手表的网站沈阳做网站的公司有哪些 网站空间管理地址东北大学秦皇岛吧 胶州建网站常德网站建设多少钱 网站制作网页制作手机wap网站开发与设计 网站建设asp编程做flash网站 任务平台网站建设网站域名起名 河南城乡建设部网站基础建设基金 利用淘宝联盟做网站网站建设内容3000字 制作一个论坛网站多少钱做宣传图册在什么网站 温州瑞安网站建设平台专业seo外包 网站建设公司哪家强网站 参数 广州开发网站报价erp管理系统免费版 .net mvc做网站新手怎么做美工图 好看的网站设计安义南昌网站建设公司 阿里云带宽5m能做什么网站建设银行网站上的的研究报告 东营做网站m0536红玫瑰直播免费版视频 网站建设 合同php网站数据迁移 本地网站搭建时需要使用的软件是公众号的文章下载 wordpress 江都区城乡建设局门户网站有哪些网站是可以做宣传的