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

事业单位网站开发工作规程潍坊设计网站

事业单位网站开发工作规程,潍坊设计网站,wordpress 地图相册,网站备案地区名目录 一、什么是单例模式 二、饿汉模式 三、懒汉模式 一、什么是单例模式 单例模式是Java中的设计模式之一#xff0c;能够保证某个类在程序中只存在唯一一份实例#xff0c;而不会创建出多个实例 单例模式有很多实现方式#xff0c;最常见的是饿汉和懒汉两种模式 二、…目录 一、什么是单例模式 二、饿汉模式 三、懒汉模式 一、什么是单例模式 单例模式是Java中的设计模式之一能够保证某个类在程序中只存在唯一一份实例而不会创建出多个实例 单例模式有很多实现方式最常见的是饿汉和懒汉两种模式 二、饿汉模式 饿汉模式在类加载时就创建实例 如何实现饿汉式单例模式 1. 在类中完成实例的初始化在创建的类中创建唯一实例 2. 对外提供获取该唯一实例的方法提供访问该实例的全局静态方法getInstance()来获取该类的唯一实例 3. 构造方法私有化保证类外部不能实例化只有在类中创建的唯一实例 //饿汉式单例模式 public class HungrySingLeton {//在类中创建唯一实例private static final HungrySingLeton instance new HungrySingLeton();//构造方法私有化保证类外部不能进行实例化private HungrySingLeton(){}//对外提供获取该唯一实例的方法public static HungrySingLeton getInstance(){return instance;} } 饿汉式单例模式线程安全吗 饿汉式单例模式在类加载时就进行初始化创建唯一实例。它在线程还没出现之前就实例化了外部只能通过getInstance()方法来获取唯一实例相当于“读操作”因此是线程安全的 饿汉式单例模式的缺点 在类加载时就创建实例并一直在内存中若不使用该实例该实例仍然存在此时存在内存浪费问题 三、懒汉模式 类加载时不创建实例直到第一次使用的时候才创建实例 如何实现懒汉模式 懒汉模式的实现与饿汉模式类似唯一的区别是懒汉模式直到第一次使用的时候才会创建实例 1. 在类中创建唯一实例并将该实例的初始值设为null 2. 对外提供获取该唯一实例的方法若是第一次使用该方法则创建实例 3.  构造方法私有化保证类外部不能实例化只有在类中创建的唯一实例 public class LazySingleton {//在类中创建唯一实例,并将其置为nullprivate static LazySingleton instance null;//构造方法私有化保证类外部不能进行实例化private LazySingleton(){}//对外提供获取该唯一实例的方法public static LazySingleton getInstance(){//若是第一次使用该方法则初始化instanceif (instance null){instance new LazySingleton();}return instance;}}懒汉模式线程安全吗 在多线程情况下可能会出现创建多个实例的情况 如何解决线程安全问题 通过加锁来解决线程安全问题 将判断instance是否为空和创建实例两个操作加上锁或是直接在方法上加上synchronized从而保证在上图的情况下也只创建一个实例 public static LazySingleton getInstance(){synchronized (LazySingleton.class){//若是第一次使用该方法则初始化instanceif (instance null){instance new LazySingleton();}}return instance;} 或 public synchronized static LazySingleton getInstance(){//若是第一次使用该方法则初始化instanceif (instance null){instance new LazySingleton();}return instance;} 此时 由于加锁和解锁开销较高而懒汉式单例模式仅在第一次调用时才会存在可能创建多个实例的问题在后面调用getInstance()方法时判断instance不为空直接返回instance而在加锁后无论是否已经存在实例在多线程情况下都会发生阻塞此时存在执行效率低的问题 因此在加锁前判断是否已经创建实例若已经创建实例则直接返回instance若未创建实例则进行加锁操作 public static LazySingleton getInstance(){//判断是否已经创建实例若已经创建实例则不加锁直接返回instanceif(instance null){//若实例未创建则向下执行来竞争锁//竞争成功的锁进行创建实例操作synchronized (LazySingleton.class){//在竞争成功的锁创建实例并释放锁后//其他竞争到锁的线程被内层if挡住不会创建多个实例if (instance null){instance new LazySingleton();}}}return instance;} 通过两个if条件判断降低了锁竞争的频率既保证了线程安全又提高了执行效率 此时线程安全了吗 此时指令重排序也可能引起线程安全问题 指令重排序是编译器优化的一种方式通过调整原有代码的执行顺序在保证逻辑不变的前提下提高程序的效率 在创建实例时可将其分为三个步骤 1. 申请一段内存空间 2. 在该内存空间上调用构造方法创建出实例 3. 将该内存地址赋值给instance引用变量 正常情况下创建实例是按照1 2 3的顺序来执行的而编译器也可能会将其优化为1 3 2的顺序来执行 而当按照1 3 2 的方式来创建实例时就可能会出现问题 如何解决指令重排序带来的线程安全问题 使用volatile  volatile能够禁止指令重排序从而保证创建实例时按照1 2 3的顺序来创建出实例保证创建出初始化的实例 public class LazySingleton {//在类中创建唯一实例,并将其置为null//volatile:禁止指令重排序private volatile static LazySingleton instance null;//构造方法私有化保证类外部不能进行实例化private LazySingleton() {}//对外提供获取该唯一实例的方法public static LazySingleton getInstance() {//判断是否已经创建实例若已经创建实例则不加锁直接返回instanceif (instance null) {//若实例未创建则向下执行来竞争锁//竞争成功的锁进行创建实例操作synchronized (LazySingleton.class) {//在竞争成功的锁创建实例并释放锁后//其他竞争到锁的线程被内层if挡住不会创建多个实例if (instance null) {instance new LazySingleton();}}}return instance;} }懒汉模式在类加载时并没有进行实例化而是在第一次调用getInstance()方法的时候才进行实例化。若一直没有调用getInstance()方法则不创建该唯一实例此时节省了实例化的开销
http://www.yutouwan.com/news/348554/

相关文章:

  • 查询公司的网站备案王占山战斗英雄简历
  • 代做道具网站北京做网站建设的公司哪家好
  • 如何给网站做seo优化网站后台验证码出不来
  • 上海高端网站公司山东聊城建设学校网站
  • 东莞手机网站价格表网站怎么做关键词搜索排面
  • 描述网站建设的具体流程h5网站建设服务
  • 南宁外贸网站建设开发公司综合部内部管理章程
  • 如何建设网站的论文文旅部:不随意关停娱乐场所
  • 网站工商网监标网页创意与设计50例
  • 新专业建设的重点任务seo静态页面生成系统
  • 网站响应速度验收免费传奇游戏在线玩
  • 保定曲阳网站建设那些网站可以做宣传
  • 中企动力做的网站好吗苏州模板做网站
  • 河北省建设工程安全生产网站电商网站平台建设视频
  • 衡阳企业网站网站是否有备案
  • 怎么制作公司自己网站郑州app制作开发公司
  • 嘉兴品牌网站建设免费做简历网站有哪些
  • 网站制作怎么做下拉菜单网站注册页面模板
  • 佛山本地的网站设计公司宁波网站制作 收费标准
  • 企业如何对自己的网站进行建设wordpress 新安装 慢
  • evus在哪个网站做登记wordpress自定义背景颜色
  • 重庆巴南区网站开发公司市辖区郑州网站建设
  • 太原本地网站顶部固定网站模板
  • 长春建站培训班专门做各种产品测评的网站
  • 玉溪的网站建设公司品牌策划与设计机构
  • 小红书网站建设内容html在线运行
  • django电影网站开发如何用ps做网站效果图
  • 怎样创建网站网站杭州市建设工程招标投标网
  • 网络营销做私活网站ui网页设计尺寸
  • 徐州在线制作网站wordpress同时登录