当前位置: 首页 > 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.pierceye.com/news/148107/

相关文章:

  • 顺德公司做网站网站美工和网页设计的区别
  • 江苏建设造价信息网站山东丽天建设集团网站
  • 兰州网站建设程序wordpress自动超链接
  • zencart网站模板下载怎么自己建立网站及建立网站方法
  • 孝感市门户网站各大网站怎么把世界杯做头条
  • 手机端网站开发视频教程怎么制作爆米花教程
  • 温岭做网站公司开发一个企业官网多少钱
  • 宿迁明远建设有限公司网站赣州58同城网招聘找工作
  • 网站未续费到期后打开会怎样wordpress 顶部栏 悬浮
  • 内部优惠券网站怎么做大连网站制作建设
  • 经营虚拟网站策划书福建设备公司网站
  • 网站建设费用明细报价wordpress暗箱
  • 南宁网站建公司电话福州建站服务
  • 有没有什么推荐的网站用 php网站建设打出一首古诗
  • 品牌网站建设浩森宇特wordpress 首页 缩略图
  • 一个主机可以做几个网站域名织梦cms网站更新
  • 知名网站有哪些网站开发是什么环境
  • 哪些网站是用wordpress开发一款视频app多少钱
  • 济南网站定制制作建设项目 环评申报网站
  • 无锡响应式网站设计wordpress站群管理系统
  • 主题网站策划设计书网络营销是什么的一项活动
  • python+网站开发实例教程免费做视频网站
  • 免费建站自己的网址美化网站公司
  • 做购物网站哪个cms好用网络规划与设计就业前景
  • wordpress仿站工具网站建设jw100
  • 网站推广过程叙述关键词歌词
  • vip影视网站如何做appwordpress centos查看目录
  • 网站怎么套模板山西seo博客
  • 好看的手机网站推荐新建的网站 找不到
  • 网站站内搜索怎么做seo搜索优化