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

网上招聘网站开发报告郑州量站站软件开发有限公司

网上招聘网站开发报告,郑州量站站软件开发有限公司,建个网站的费用,百度入口网页版目录 一、单例模式概述 二、“饿汉模式”实现单例模式 三、“懒汉模式”实现单例模式 3.1 单线程下的“懒汉模式” 3.2 多线程下的“懒汉模式” 一、单例模式概述 1#xff09;什么是单例模式#xff1f; 单例模式是一种设计模式。 单例模式可以保证某个类在程序中只存…目录 一、单例模式概述 二、“饿汉模式”实现单例模式 三、“懒汉模式”实现单例模式 3.1 单线程下的“懒汉模式” 3.2 多线程下的“懒汉模式” 一、单例模式概述 1什么是单例模式 单例模式是一种设计模式。 单例模式可以保证某个类在程序中只存在唯一实例即不允许创建多份实例。 使用单例模式上述要求就得到了检查和校验。 2单例模式的实现形式 单例模式可以通过很多种方法实现“饿汉模式”和“懒汉模式”是其中最基础的两种本文只介绍这两种实现。 二、“饿汉模式”实现单例模式 通过代码演示“饿汉模式”实现的单例模式 class Singleton{//新建一个唯一实例private static Singleton instance new Singleton();//方法返回唯一实例public static Singleton getInstance() {return instance;}//将构造方法私有化private Singleton() { } } 1上述代码做了什么 创建了一个被 static 修饰的实例这个实例成为了类属性。类对象只会有一个这个类属性也只会有一个。 私有化构造方法外部无法 new 新的实例只能通过 get 方法获取唯一的那一个 instance。 2为什么叫做“饿汉模式” 上述代码中实例是类属性。类属性在类加载的时候就创建了创建时机早十分“迫切”因此称为“饿汉模式”。 代码证明“饿汉模式”返回的实例是唯一的 public class Singleton_Demo0 {public static void main(String[] args) {//想直接new对象就会报错//Singleton instance new Singleton();//两次调用getInstance()方法并分别赋值Singleton instance1 Singleton.getInstance();Singleton instance2 Singleton.getInstance();//对比两个变量发现是同一实例if(instance1 instance2){System.out.println(两个对象是同一个对象);}} }//运行结果 两个对象是同一个实例 3“饿汉模式”的单例模式在多线程下是线程安全的吗 上述代码中get 方法返回的是已经创建好的实例这个操作本质上只是一个“读操作”多个线程读取同一个变量并不会造成线程不安全。 因此“饿汉模式”的单例模式在多线程下是线程安全的。 三、“懒汉模式”实现单例模式 3.1 单线程下的“懒汉模式” 通过代码演示“懒汉模式”实现的单例模式 class Singleton{//声明一个变量作为类属性private static Singleton instance null;//判断变量是否为null是则创建实例后返回否则返回public static Singleton getInstance() {if(instance null){instance new Singleton();}return instance;}//将构造方法私有化private Singleton() { } } 1上述代码做了什么 声明了一个类属性。类对象只会有一个这个类属性也只会有一个。 私有化构造方法外部无法 new 新的实例只能通过 get 方法获取唯一的那一个 instance。get 方法中根据变量是否为 null 判断是否应该创建实例。 2为什么叫做“懒汉模式” 上述代码中实例是在程序员第一次调用 get 方法后才创建的创建时机较晚或者根本不用创建因此称为“懒汉模式”。 3.2 多线程下的“懒汉模式” 1单线程下的“懒汉模式”在多线程下是线程安全的吗 答案是否定的单线程下的“懒汉模式”在多线程下是线程不安全的我们可以从以下两个方面分析 “原子性” 上述代码中判断变量是否为空的代码 —— if(instance null)和实例化代码 ——  instance new Singleton()并非是“原子”的。在多线程环境下这就可能导致线程不安全。 可以使用 synchronized 关键字将这两句代码加锁解决这个问题。 内存可见性和指令重排序 因为 instance 是一个被 static 修饰的共享数据而且编译器内部可能对实例化的代码 —— new Singleton()进行了编译器优化。 这就无法保证内存的可见性和指令的顺序执行因此在多线程环境下可能导致线程不安全。 可以使用 volatile 关键字对共享数据 instance 进行修饰解决这个问题。 使用以上两个关键字的原因和方式详细请参考以下博客 阅读指针 - 《synchronized 关键字 和 volatile 关键字》JavaEE synchronized关键字和锁机制 -- 锁的特点、锁的使用、锁竞争和死锁、死锁的解决方法-CSDN博客文章浏览阅读70次。介绍了 synchronized 关键字 和 锁机制其中重点介绍了锁的特点、使用方法和死锁的相关内容。https://blog.csdn.net/zzy734437202/article/details/134742168JavaEE volatile关键字 -- 保证内存可见性、禁止指令重排序-CSDN博客文章浏览阅读59次。简单介绍什么是内存可见性和指令重排序。volatile关键字可以将这两种编译器优化强制关闭。https://blog.csdn.net/zzy734437202/article/details/134757070 2“懒汉模式”在多线程下应该怎么编写 根据上述分析根据单线程模式下的“懒汉模式”进行改进。 方法如下 增加 volatile 关键字对共享数据进行修饰。 为判断是否为 null 和 实例化的代码加锁使这两句代码称为“原子”。 增加 volatile 关键字对共享数据进行修饰 private volatile static Singleton instance null; 为判断是否为 null 和 实例化的代码加锁使这两句代码称为“原子” public static Singleton getInstance() {synchronized (locker){if(instance null){instance new Singleton();}}return instance;} 3“双重校验锁” 我们再仔细分析一下上述的 get 方法。 假设程序需要多次调用这个 get 方法那么每一次进入都会进行加锁加锁是会增加系统开销的。 那么是否真的有必要每次都加锁呢 当 get 方法被第一次调用实例就会被创建那么后续再调用这个 get 方法时返回实例就好了加锁部分的代码块完全可以不用执行。 在加锁的代码块之外再增加一个if(instance null)进行判断那么实例在被创建之后也就不会再进入加锁的代码块中了。 我们成功利用“双重校验锁”优化了程序。 代码演示“双重校验锁”优化后的 get 方法 public static Singleton getInstance() {//这个if用于判断是否需要加锁if(instance null){synchronized (locker){//这个if用于判断是否需要新建实例if(instance null){instance new Singleton();}}}return instance;} 经过以上的完善和优化我们终于可以写出在多线程下保证线程安全的“懒汉模式”单例模式了 class Singleton{//声明一个变量作为类属性private volatile static Singleton instance null;private static final Object locker new Object();//判断变量是否为null是则创建实例后返回否则返回public static Singleton getInstance() {//这个if用于判断是否需要加锁if(instance null){synchronized (locker){//这个if用于判断是否需要新建实例if(instance null){instance new Singleton();}}}return instance;}//将构造方法私有化private Singleton() { } } 阅读指针 - 《阻塞队列》 链接生成中.........
http://www.yutouwan.com/news/11695/

相关文章:

  • 深圳网站制作公司资讯建设多语种网站
  • 网站建设价格标准方案高端网站建设公司兴田德润可以不
  • 公司企业网站免费建设三合一网站开发架构
  • 那些网站能够做推广案例学 网页设计与网站建设
  • 网站设计初步规划建筑业企业资质证书多少钱
  • 龙岩网站改版较好的公司张店网站制作首选专家
  • 微信网站设计尺寸百度推广助手客户端
  • 闽清建设局网站做一个电子商务网站建设策划书
  • 做漫画网站的素材织梦网站如何更新系统
  • 南阳旅游网站建设电商外贸平台大全
  • 投简历找工作哪个网站好乐从网站建设
  • 自己做的网站能备案吗用.net做网站好 还是用php
  • 南昌哪里学做网站dw网页制作详细步骤景颇族
  • php招聘网站建设网站风格介绍
  • 创世网站网络建设互联网网站建设一条龙服务
  • 网站常用英文字体动态公司网站设计
  • 网站头尾一样的怎么做最好公众号软文推广
  • 网站建设需要多久wordpress woocommerce 单位
  • 网站开发和维护360广告联盟平台
  • 苏州专业网站建设公司建网站得多少钱
  • 深圳网站设计廊坊公司上海中高风险地区名单
  • 网站里网格怎么做装饰设计公司资质
  • 天津市设计网站的公司那个网站可以帮助做数学题
  • 吴桥网站建设游戏seo推广
  • 做ps兼职的网站一个云主机怎么挂两个网站
  • 网站排名的重要性成都百度公司怎么样
  • 成都网站开发团队巩义市网站建设培训班
  • 宁波做公司网站公司微信开发者工具下载官网下载
  • 查网站是否正规石家庄搭建网站
  • 一流的嘉兴网站建设有创意的公司名字