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

护肤品网站建设分析怎么做淘宝客采集网站

护肤品网站建设分析,怎么做淘宝客采集网站,淘宝网页版,企业邮箱网易目录 一、什么是单例模式 二、饿汉模式 三、懒汉模式 一、什么是单例模式 单例模式是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.zqtcl.cn/news/148107/

相关文章:

  • 织梦模板添加网站地图温州做网站掌熊号
  • 怎样凡科建设网站建立网站的步骤
  • 模板类网站建设中国都有哪些网站
  • 深圳百度推广网站建设深圳电器网站建设
  • 响应式网站有什么区别官方app
  • 手机网站建设哪里好网站架构设计师待遇怎么样
  • 静态网站设计wordpress网页视频播放器
  • 打电话做网站的话术网站安全维护方案
  • 变更备案网站可以访问吗google浏览器下载安装
  • 网站空间更换网站开发的服务器是什么
  • 网站 网页玉溪建设网站
  • 江西宜春市城市建设档案馆网站朋友圈广告30元1000次
  • 响应式网站 分辨率惊艳的网站
  • 苏州网站公司排名前十最好看的视频免费下载
  • 快速设计一个网站wordpress4.9.6
  • 网站建立教学深圳宝安网站建设公司推荐
  • 深圳企业网站建设制作公司叶县红色家园网站建设
  • 网站制作报价被哪些因素影响建设银行官方网站首页个人登录
  • 免费网站怎么建谁能给个网站谢谢
  • 吴忠网站建设家里面的服务器可以做网站吗
  • 这是我自己做的网站做网站前台要学什么课程
  • 程序网站开发建设隔离变压器移动网站
  • 网站设置不发送消息怎么设置回来用typecho做的网站
  • 网站机房建设嵌入式培训机构哪家好
  • 购物网站页面设计图片网站 签约
  • 上海网站改版方案网站邮件设置
  • 如何在自己网站添加链接高端品牌logo图片
  • 网站建设找c宋南南app软件设计
  • 龙岗网站推广seo 0xu
  • 成都做网站微网站后台录入