当前位置: 首页 > news >正文 学校建设网站的结论wordpress内网访问 news 2025/10/25 13:51:20 学校建设网站的结论,wordpress内网访问,衡阳企业网站建设价格,芜湖有没有做网站的目录 概念 饿汉模式 懒汉模式 懒汉模式在多线程环境下的优化 1.线程安全问题 2.效率问题 3.指令重排序导致的问题 1#xff09;为什么要进行指令重排序#xff1f; 2#xff09;指令重排序在上述代码为什么会构成问题#xff1f; 导读#xff1a; 单例模式是一种…目录 概念 饿汉模式 懒汉模式 懒汉模式在多线程环境下的优化 1.线程安全问题 2.效率问题 3.指令重排序导致的问题 1为什么要进行指令重排序 2指令重排序在上述代码为什么会构成问题 导读 单例模式是一种设计模式。 简单来讲设计模式就类似于下棋的棋谱在特定的场景下使用这种模式固定套路可以让程序达到一个不错的效果。设计模式也是和编程语言相关的有些设计模式是在给一些语言的语法填坑而有些语言又不太依赖设计模式。 设计模式适合具有一定编程经验之后再去主要学习如果缺乏变成经验难以理解别人这么设计的好处。 概念 单例模式的概念很简单顾名思义既在一个线程中一个类只包含一个对应的实例化对象。 在多线程程序中有些场景就是要求只能创建一个实例化对象。 比如JDBC的设置数据源 一个数据库对应的MySQL服务器只有一份DataSoruce这个类就没有必要new多份。 当然JDBC这块知识不了太解没关系主要是告诉你单例模式在多线程程序中其实是非常重要的。 单例模式的写法有很多这里介绍两个最常用、最主流的写法饿汉模式与懒汉模式。 饿汉模式 饿汉的饿其实突出的是实例的创建时间比较早是在类被加载的时候就创建了可以近似的理解为在程序启动时创建 为SingleL类写一个单例模式用饿汉模式 class SingleL{private static SingleL singleLnew SingleL();//直接new一个public static SingleL getSingleL(){return singleL;} } 懒汉模式 懒汉的懒其实突出的是实例的创建时间比较晚。 这里的晚指的是程序在需要这个类的时候才去实例化它 class SingleL{private static SingleL instancenull;//先置为空要的时候才实例化public static SingleL getInstance(){if(instancenull){//没有创建先创建有就直接返回instancenew SingleL();}return instance;}} 懒汉模式有一个优点就是效率高在计算机中懒其实是一个褒义词勤快反而是一个贬义词。 为什么这么说呢 最典型的场景就是打开一个内存比较大的文档为了有一个更好的用户体验响应速度因该是越快越好的如果程序加载很“勤快”提前加载完所有文档内容打开文档程序所需的时间势必会变长用户体验感就会变差。 但是如果程序加载比较的“懒”先只加载几页之用户想要看那一页在加载那一页响应速度就变得快了用户体验感也会不错。 懒汉模式在多线程环境下的优化 1.线程安全问题 刚才的懒汉模式的代码在多线程环境下肯定会造成线程安全问题因为程序中不仅对变量进行了修改而且读取和修改操作不是原子性的。 class SingleL{private static Object locknew Object();private static SingleL instancenull;//先置为空要的时候才实例化public static SingleL getInstance(){synchronized(lock){/*注意读写操作都要放到同步块中*/if(instancenull){instancenew SingleL();}}return instance;//返回之加不加到同步块中都无所谓因为线程安全问题已经解决} } 2.效率问题 这个问题是由上面解决了线程安全问题诱发的新的问题。 public static SingleL getInstance(){synchronized(lock){/*注意读写操作都要放到同步块中*/if(instancenull){instancenew SingleL();}}return instance;//返回之加不加到同步块中都无所谓因为线程安全问题已经解决} 假如说由多个线程都要调用getInstance()那么就很可能导致多次的上锁和解锁因为每次都要去判断有没有创建这个单例对象这是非常消耗时间的。 解决办法也很简单就是在线程安全的情况下再次判断instance是否为null class SingleL{private static Object locknew Object();private static SingleL instancenull;//先置为空要的时候才实例化public static SingleL getInstance(){if(instancenull){synchronized(lock){/*注意读写操作都要放到同步块中*/if(instancenull){instancenew SingleL();}}}return instance;//返回之加不加到同步块中都无所谓因为线程安全问题已经解决} } 这就极大避免了多次上锁的情况了你细品两个if(instancenull)都不是多余的 3.指令重排序导致的问题 1为什么要进行指令重排序 指令重排序和内存可见性一样都是编译器为了优化程序而引入的。 假如说有1、2、3条指令。这三条指令如果顺序执行可能是不经济的。例如执行1指令的时候需要和某个其他的指令同时争抢某一个资源导致冲突但是如果先执行2然后执行1就可以避免这种情况发生。 再比如这个形象的例子老妈让你出去菜市场买三样东西葱、姜、蒜 为了节省时间继续打游戏当然先去姜蒜两个摊位把东西买了然后最后去葱这个摊位买啊。 2指令重排序在上述代码为什么会构成问题 在优化后的代码中new SingleL在编译时可以大致分解成三个指令 1、给对象分配内存空间。 2、调用构造函数初始化对象 3、讲instance引用指向分配内存的空间 通过指令重排序后可能先执行1然后直接执行3最后执行2。 这样就会出现一个不安全的时机就是1、3都执行完了但是2还没有执行此时instance引用指向的是一个无效的内存因为还没有初始化好对象。 然后我们回到代码中来假如说有两个线程他们都刚开始执行单例对象还没有创建 3问题的解决办法 指令重排序和内存可见性问题解决方式是一样的用volatile关键字修饰变量。 volatile的作用 1、保证变量可见性一个线程对volatile变量修改另一个线程可以立马看到。 2、禁止指令重排序防止编译器对volatile变量的读/写操作进行指令重排序。 优化后的代码 class SingleL{private static Object locknew Object();private static volatile SingleL instancenull;//先置为空要的时候才实例化,最后volatile禁止指令重排序public static SingleL getInstance(){if(instancenull){/*在同步块中执行*/synchronized(lock){if(instancenull){instancenew SingleL();}}}return instance;} } 文章转载自: http://www.morning.ypklb.cn.gov.cn.ypklb.cn http://www.morning.dxgt.cn.gov.cn.dxgt.cn http://www.morning.xqkjp.cn.gov.cn.xqkjp.cn http://www.morning.jqtb.cn.gov.cn.jqtb.cn http://www.morning.rgsnk.cn.gov.cn.rgsnk.cn http://www.morning.lktjj.cn.gov.cn.lktjj.cn http://www.morning.qkqgj.cn.gov.cn.qkqgj.cn http://www.morning.npcxk.cn.gov.cn.npcxk.cn http://www.morning.lbxcc.cn.gov.cn.lbxcc.cn http://www.morning.whclz.cn.gov.cn.whclz.cn http://www.morning.rnytd.cn.gov.cn.rnytd.cn http://www.morning.qztsq.cn.gov.cn.qztsq.cn http://www.morning.dhqzc.cn.gov.cn.dhqzc.cn http://www.morning.nmkbl.cn.gov.cn.nmkbl.cn http://www.morning.ngcw.cn.gov.cn.ngcw.cn http://www.morning.mqlsf.cn.gov.cn.mqlsf.cn http://www.morning.ktdqu.cn.gov.cn.ktdqu.cn http://www.morning.ntgrn.cn.gov.cn.ntgrn.cn http://www.morning.mfcbk.cn.gov.cn.mfcbk.cn http://www.morning.qrqcr.cn.gov.cn.qrqcr.cn http://www.morning.ydwnc.cn.gov.cn.ydwnc.cn http://www.morning.zfyfy.cn.gov.cn.zfyfy.cn http://www.morning.nfmlt.cn.gov.cn.nfmlt.cn http://www.morning.gxklx.cn.gov.cn.gxklx.cn http://www.morning.pswqx.cn.gov.cn.pswqx.cn http://www.morning.gjsjt.cn.gov.cn.gjsjt.cn http://www.morning.hcwjls.com.gov.cn.hcwjls.com http://www.morning.dfdhx.cn.gov.cn.dfdhx.cn http://www.morning.smqjl.cn.gov.cn.smqjl.cn http://www.morning.ljglc.cn.gov.cn.ljglc.cn http://www.morning.jwbfj.cn.gov.cn.jwbfj.cn http://www.morning.yqqxj1.cn.gov.cn.yqqxj1.cn http://www.morning.xxwl1.com.gov.cn.xxwl1.com http://www.morning.gfnsh.cn.gov.cn.gfnsh.cn http://www.morning.pnljy.cn.gov.cn.pnljy.cn http://www.morning.dfffm.cn.gov.cn.dfffm.cn http://www.morning.gpkjx.cn.gov.cn.gpkjx.cn http://www.morning.skbkq.cn.gov.cn.skbkq.cn http://www.morning.fmkbk.cn.gov.cn.fmkbk.cn http://www.morning.fjshyc.com.gov.cn.fjshyc.com http://www.morning.fgsct.cn.gov.cn.fgsct.cn http://www.morning.yrngx.cn.gov.cn.yrngx.cn http://www.morning.fsqbx.cn.gov.cn.fsqbx.cn http://www.morning.trjr.cn.gov.cn.trjr.cn http://www.morning.hwcln.cn.gov.cn.hwcln.cn http://www.morning.qlkjh.cn.gov.cn.qlkjh.cn http://www.morning.jjwt.cn.gov.cn.jjwt.cn http://www.morning.hwzzq.cn.gov.cn.hwzzq.cn http://www.morning.kphyl.cn.gov.cn.kphyl.cn http://www.morning.cljpz.cn.gov.cn.cljpz.cn http://www.morning.tthmg.cn.gov.cn.tthmg.cn http://www.morning.bhpsz.cn.gov.cn.bhpsz.cn http://www.morning.hytr.cn.gov.cn.hytr.cn http://www.morning.zrgsg.cn.gov.cn.zrgsg.cn http://www.morning.wmfny.cn.gov.cn.wmfny.cn http://www.morning.wwthz.cn.gov.cn.wwthz.cn http://www.morning.yysqz.cn.gov.cn.yysqz.cn http://www.morning.zqbrw.cn.gov.cn.zqbrw.cn http://www.morning.nzsx.cn.gov.cn.nzsx.cn http://www.morning.rnmc.cn.gov.cn.rnmc.cn http://www.morning.wrysm.cn.gov.cn.wrysm.cn http://www.morning.qcnk.cn.gov.cn.qcnk.cn http://www.morning.pslzp.cn.gov.cn.pslzp.cn http://www.morning.lrgfd.cn.gov.cn.lrgfd.cn http://www.morning.qbgff.cn.gov.cn.qbgff.cn http://www.morning.czwed.com.gov.cn.czwed.com http://www.morning.hmhdn.cn.gov.cn.hmhdn.cn http://www.morning.wfykn.cn.gov.cn.wfykn.cn http://www.morning.gwmny.cn.gov.cn.gwmny.cn http://www.morning.qfdmh.cn.gov.cn.qfdmh.cn http://www.morning.tlnbg.cn.gov.cn.tlnbg.cn http://www.morning.hcrxn.cn.gov.cn.hcrxn.cn http://www.morning.qfrsm.cn.gov.cn.qfrsm.cn http://www.morning.gyqnc.cn.gov.cn.gyqnc.cn http://www.morning.mlbdr.cn.gov.cn.mlbdr.cn http://www.morning.kgmkl.cn.gov.cn.kgmkl.cn http://www.morning.gynkr.cn.gov.cn.gynkr.cn http://www.morning.kmrgl.cn.gov.cn.kmrgl.cn http://www.morning.dkbsq.cn.gov.cn.dkbsq.cn http://www.morning.njftk.cn.gov.cn.njftk.cn 查看全文 http://www.tj-hxxt.cn/news/248322.html 相关文章: 做内贸什么网站资源比较多seo网站推广招聘 外贸网站系统电子商务网站成功的关键是 汕头企业网站公司制作好看的wordpress页面 做调查问卷用的网站或软件南通通州建设工程质量监督网站 做cpa怎么建立自己网站域名注册免费 词条有哪些网站可以做合肥网站建设推荐 晨飞网络 西安正规网站建设公司网站如何安装dedecms 被骗去国外做网站网站推广php 网站制作的意义 做影视网站需要多大硬盘wordpress 多站点 主站点 手机销售网站模板医院网站开发方案 中山电商网站制作西安做视频网站公司 做招商加盟做得比较好的网站网站的建设公司简介 cdr做网站流程西宁网络信息 网站建设 温州网站设计网站建设网站c2c典型电子商务平台有哪些 淮南网站优化公司wordpress主题免费共享 商品网站怎么做温州高端网站建设 蒙自市建设局网站化州网站开发公司 广州专业网站改版wordpress单本小说模板 普通网站和门户网站的区别网址大全快捷怎么来的 标准通网站建设给公司做宣传网站的好处 windows网站建设教程好兄弟资源网在线看片 济南企业营销型网站建设价格宣传片拍摄注意事项 手机购物网站设计在线医疗网站建设 仙游有人做网站2024中核招聘网最新招聘公告 中国建设银行官网站下载弹幕网站是什么技术做的 网站关站新乡seo外包 泰安高新区建设局网站淘宝服务商 上海哪里做网站比较好军事网站模板 网上做效果图网站有哪些软件电商网站建设优缺点 idc网站源码电子商务网站硬件需求