当前位置: 首页 > news >正文

相亲网站怎么做百度seo学院

相亲网站怎么做,百度seo学院,巢湖网站建设,做婚恋网站的翻译好吗单例模式是设计模式之一,能保证某个类在程序中只存在唯一一份实例,而不会创建出多个实例 单例模式的具体实现方法有很多,最常见的是 “饿汉” 和 “懒汉” 两种。 饿汉模式 class Singlenton{private static Singlenton instance new Sin…

单例模式是设计模式之一,能保证某个类在程序中只存在唯一一份实例,而不会创建出多个实例

单例模式的具体实现方法有很多,最常见的是 “饿汉”“懒汉” 两种。

饿汉模式

class Singlenton{private static Singlenton instance = new Singlenton();public static Singlenton getInstance(){return instance;}//在此类的外面无法调用构造方法,无法创建实例private Singlenton(){}
}

懒汉模式

类加载的时候不创建实例,第一次使用的时候才创建实例

单线程版

class Singletonlazy{private static Singletonlazy instance = null;public static Singletonlazy getInstance(){if(instance==null){instance = new Singletonlazy();}return instance;}private Singletonlazy(){}
}

多线程版

相比单线程版,多线程版考虑了线程安全问题

线程安全问题发生在首次创建实例时,可能多个线程同时调用getInstance方法,就可能导致创建了多个实例。

加上 synchronized 可以改善线程安全问题

class Singletonlazy{private static Singletonlazy instance = null;private static Object locker = new Object();public static Singletonlazy getInstance(){synchronized (locker){if(instance==null){instance = new Singletonlazy();}}return instance;}private Singletonlazy(){}
}

多线程版优化

上面的代码虽然说解决了线程安全问题,但是只要调用了getInstance方法,就会触发加锁操作,产生阻塞,影响性能。

我们想要优化,就要在加锁之前判定一下是否需要加锁。

外层的if(instance==null)是判断实例有没有创建

内层的if(instance==null)进一步判断实例有没有创建,因为在外层 if 和加锁之间,切换了线程并创建了实例,此时切换到原来的线程如果没有判断,就会创建出多个实例。

但是光加了一个外层 if 还不够,此时可能因为指令重排序引起的线程安全问题

instance = new Singletonlazy();分为三条指令
  1. 分配内存空间
  2. 执行构造方法
  3. 内存空间的地址赋值给引用变量

编译器可能按照 1 2 3 的顺序来执行,也可能按照 1 3 2 的顺序执行

当按照 1 3 2的顺序执行时,由于 3 是把内存空间的地址赋值给引用变量,所以此时 instance现在不为 null 了,此时如果其他线程判断外层 if 时,由于instance不为null了,所以直接返回instance,但是此时instance指向没有初始化,上面值全是0的内存,此时getInstance到的就是个错误的值,会引发一系列不可预期的情况。

此时,我们用volatile 关键字告知编译器此变量指令不可重排序即可解决。

class Singletonlazy{private static volatile Singletonlazy instance = null;private static Object locker = new Object();public static Singletonlazy getInstance(){if(instance==null){synchronized (locker){if(instance==null){instance = new Singletonlazy();}}}return instance;}private Singletonlazy(){}
}

http://www.15wanjia.com/news/23919.html

相关文章:

  • 企业宣传片汇报片拍摄网站seo李守洪排名大师
  • 做网站的一个月能赚多少钱网站测试的内容有哪些
  • 帝国cms 仿站 wordpress做app推广去哪找商家
  • 2022百度seo优化工具徐州seo企业
  • 长景园林这个网站谁做的北京seo全网营销
  • 连云港权威网站优化服务厦门网站制作全程服务
  • 网站开发哈尔滨网站开发公司cba最新排名
  • app制作下载宁波网站制作优化服务
  • 平面设计接单攻略电子书长沙网站优化体验
  • 网站除了做流量还需要什么软件吗足球比赛直播2021欧冠决赛
  • 岳阳seo杭州网站优化企业
  • 网站开发的数据新东方线下培训机构官网
  • 做网站搞友情链接网络广告策划案
  • 武汉网站制作 app开发运营商推广5g技术
  • 网站建设谈判技巧搜索引擎优化的技巧有哪些
  • 网站怎么做免费推广上海网络营销seo
  • 网站建设开发流程竞价托管一般要多少钱
  • 龙岗网站建设开发设计公司长春seo快速排名
  • 阆中市网站建设服务企业文化案例
  • 花都移动网站建设如何添加百度指数
  • 东昌网站建设太原做网站的工作室
  • 北京网站建设公司哪家好关键词优化营销
  • phpcms双语网站怎么做活动营销的方式有哪些
  • 商丘网站公司电话号码郑州网络优化实力乐云seo
  • 星座 网站 建设怎么才能在百度上打广告
  • 做快递单网站如何进行网络推广
  • 南宁建企业网站软文写作兼职
  • 为什么要用CGI做网站安卓优化大师清理
  • 网站开发需要掌握哪些知识宁波百度seo排名优化
  • 楚州网站开发山西网站seo