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

网站建设合同用贴印花税吗中文域名注册费用标准

网站建设合同用贴印花税吗,中文域名注册费用标准,站长工具seo综合查询黄,怎样做一个小程序一、概念 单例设计模式(Singleton Design Pattern):一个类只允许创建一个对象(或者实例),那这个类就是一个单例类。 优点:在内存里只有一个实例,减少了内存的开销,避免…

一、概念

单例设计模式(Singleton Design Pattern):一个类只允许创建一个对象(或者实例),那这个类就是一个单例类。

优点:在内存里只有一个实例,减少了内存的开销,避免一个全局使用的类频繁地创建与销毁。

缺点:没有接口,不能继承,与开闭职原则冲突。

使用场景:有些数据在系统中只应该保存一份,就比较适合设计为单例类。比如,系统的配置信息类。除此之外,我们还可以使用单例解决资源访问冲突的问题。

二、实现

1、步骤:

  • 构造方法定义为私有方法。
  • 定义一个私有的类静态实例。
  • 提供一个公有的获取实例的静态方法。

2、实现方式

  • 饿汉模式
public class HungryModeSingleton {private static final HungryModeSingleton mInstance = new HungryModeSingleton();private HungryModeSingleton() {}public static HungryModeSingleton getInstance() {return mInstance;}
}

总结:在类加载的时候就对实例进行初始化,没有线程安全问题;获取实例的静态方法没有使用同步,调用效率高;但是没有使用懒加载,如果该实例从始至终都没被使用过,则会造成内存浪费。

  • 懒汉模式
public class LazyModeSingleton {private static LazyModeSingleton mInstance;private LazyModeSingleton () {}public static synchronized LazyModeSingleton getInstance() {if (mInstance == null){mInstance = new LazyModeSingleton();}return mInstance;}
}

总结:上面是线程安全的懒汉模式,在第一次使用的时候才进行初始化,达到了懒加载的效果;但是,这种写法每次获取实例都要进行同步(加锁),因此在频繁获取对象的时候效率较低。

  • 双检锁/双重校验锁(DCL,即 double-checked locking)
 public class DCLModeSingleton {private static volatile DCLModeSingleton mInstance;private DCLModeSingleton () {}public static synchronized DCLModeSingleton getInstance() {if (mInstance == null){synchronized (DCLModeSingleton.class){if (mInstance == null){mInstance = new DCLModeSingleton();}}} return mInstance;      }
}      

总结:双重校验锁方式在第一次使用的时候才进行初始化,达到了懒加载的效果。并且只有第一次进行初始化才进行同步,因此不会有效率方面的问题。

在上面的例子中,DCLModeSingleton的实例使用了volatile关键字进行修饰,主要是为了解决在一些JDK低版本上有指令重排的问题。
指令重排问题:当线程A执行到9行的时候,线程B执行到6行,CPU在进行对象创建的时候,内部会在保证不影响最终结果的前提下对指令进行重新排序(不影响最终结果只是针对单线程)。例如:
创建对象步骤:分配空间-> 初始化对象 ->设置mInstance指向。
指令重排后:分配空间-> 设置mInstance指向 ->初始化对象
此时线程B执行到第6行,发现mInstance不为空,但是对象并没有初始化完成,会出现问题,但是概率较低。
使用volatile修饰符可以禁止指令重排,防止出现该问题。

  • 静态内部类
public class StaticModeSingleton {private StaticModeSingleton () {}private static class SingletonHolder{private static final StaticModeSingleton INSTANCE = new StaticModeSingleton();}public static StaticModeSingleton getInstance() {return SingletonHolder.INSTANCE;}
}

总结:SingletonHolder 是一个静态内部类,当外部类StaticModeSingleton被加载的时候,并不会创建 SingletonHolder 实例对象。只有当调用 getInstance() 方法时,SingletonHolder 才会被加载,这个时候才会创建instanceinstance 的唯一性、创建过程的线程安全性,都由 JVM 来保证。所以,这种实现方法既保证了线程安全,又能做到延迟加载。

  • 枚举
public enum Singleton {INSTANCE;//添加自己需要的操作public void doSomeThing() {}
}

总结:非懒加载,线程安全,可以避免反序列化重新创建对象。

3、实现方式优缺点对比
设计模式优缺点.PNG

三、应用场景

  • 网站计数器。
  • 应用程序的日志应用。
  • Web项目中的配置对象的读取。
  • 数据库连接池。
  • 多线程池。

单例模式详解

http://www.yayakq.cn/news/476144/

相关文章:

  • 延庆上海网站建设网络规划设计师备考心得
  • 高端网站定制费用是多少网站内链seo
  • 网站用户体验是什么商标如何自己注册
  • 企业网站群建设模式郁金香导航 汕头大学网址大全
  • tp5网站文档归档怎么做官方网站在家做兼职
  • html5响应式网站制作wordpress cache9 korea cdn
  • 国外设计导航网站大全建设内容管理网站的目的
  • 精品课程建设网站清单广东移动手机营业厅网站
  • 2018做分享网站网站开发语言是什么意思
  • 建设网站基本思路wordpress 端口
  • 网站域名是网站架构吗宝安高端网站建设
  • 个人建设网站如何定位网址网页网站的区别??
  • 小型网站建设价格低门户网站建设使用语言
  • 汕头网站优化找谁潍坊网页网站制作
  • 哪里做网站百度收录块wordpress wp content
  • 有什么图片做视频的网站吗邢台移动网站建设费用
  • 徐州做公司网站多少钱微信商城网站如何做
  • 鲜花网站建设教程金融公司网站 html
  • 网站广告形式wordpress判断函数
  • 网站开发要注意的问题千库网素材免费下载官方
  • 制作广告网站的步骤北京seo学校
  • 网站平台做推广汕头市城乡与住房建设局
  • 做外贸没有网站上海建网站方案
  • 优秀的企业网站设计如何速发布wordpress
  • 梅州网站建设求职简历私人申请建设网站多少钱
  • 建设个定制网站需要多少钱建立网站需要多少钱八寇湖南岚鸿团队
  • 如果建设淘宝导购网站dw做的网站怎么发布到网上
  • 美食网站开发的技术简介安阳网站设计哪家专业
  • ps做的网站首页视频上传网站如何做
  • 网站开发是指海安网站建设