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

番禺做网站多少钱移动开发专业

番禺做网站多少钱,移动开发专业,火星建站和八亿建站,万网有网站建设吗单例模式是设计模式之一,能保证某个类在程序中只存在唯一一份实例,而不会创建出多个实例 单例模式的具体实现方法有很多,最常见的是 “饿汉” 和 “懒汉” 两种。 饿汉模式 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.yayakq.cn/news/6434/

相关文章:

  • 做微商网站asp网站开发 pdf
  • 企业网站建设的实践意义网站建设需要多少
  • 网站包括哪些内容公司购买网站建设费用会计分录
  • 酒店网站建设的重要性在线ps修图编辑器
  • 网站建设下坡路形象设计师培训网课
  • 中国做进出口的网站网站后台设置关键字
  • 新余集团网站建设p图做网站兼职
  • 网站开发常见面试题自己做平台网站
  • 广州做网站需要多少钱仿简书WordPress
  • 做网站包括服务器么哈尔滨网络宣传与网站建设
  • 漳州网站建设到博大网站打开速度慢
  • 河南智能网站建设哪家好asp网站怎么仿站
  • 公司网站页面设计图片wordpress pdf缩略图
  • 深圳做积分商城网站公司技术先进的网站设计制作
  • 深圳网站建设金瓷网络系统开发方案设计(模板) 免费下载
  • 医院的网站建设目标免费人才招聘网站
  • 深圳响应式网站设计wordpress即时新闻
  • 帮别人做网站违法吗苏州中国建设银行招聘信息网站
  • 银川哪家网站建设专业去哪找wordpress主题
  • 有个网站做字的图片价格套餐网站
  • 湖州市城市建设档案馆网站南宁企业网站建设技术公司
  • 重庆开发网站wordpress用户注册邮件
  • 设计手机网站页面尺寸大小官方网站平台下载
  • 企石镇网站仿做长春网站seo哪家好
  • 东阳便宜自适应网站建设优惠重庆建站公司
  • 东莞做微网站建设wordpress 静态设置
  • 网站空间提供商网站建设公司专业公司
  • 好看怎么上传视频网站吗wordpress 显示文章分类
  • 网站需求分义乌市网站建设代理
  • 微信公众号怎么做网站天津seo公司排名