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

建设网站的目的饮食类信用渭南网站建设

建设网站的目的饮食类,信用渭南网站建设,网站建设div ass,公司logo设计免费生成图片单例模式 所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。 单例模式包含懒汉式和饿汉式,运行有且仅有一个实例化对象,只会…

单例模式

所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。

单例模式包含懒汉式和饿汉式,运行有且仅有一个实例化对象,只会new一次,两者区别在于何时new一个对象

原理:

如果我们要让类在一个虚拟机中只能产生一个对象,我们首先必须将类的构造方法的访问权限设置为private,这样,就不能用new操作符在类的外部产生类的对象了,但在类内部仍可以产生该类的对象。因为在类的外部开始还无法得到类的对象,只能调用该类的某个静态方法以返回类内部创建的对象,静态方法只能访问类中的静态成员变量,所以,指向类内部产生的该类对象的变量也必须定义成静态的。

实例化对象的创建要消耗大量的时间和资源

在整个软件系统运行过程中,这个类只被实例化一次,以后不论在哪都只调用这一个实例

要求:

  • 掌握五种单例模式的实现方式
  • 理解为何 DCL 实现时要使用 volatile 修饰静态变量
  • 了解 jdk 中用到单例的场景

饿汉式

在类加载之后先通过new关键字创建一个对象,后续调用getInstance()方法时直接返回该对象

public class Singleton implements Serializable {// 构造方法私有化,不能通过new关键字来创建对象private Singleton() {// 构造方法抛出异常是防止反射破坏单例if (INSTANCE != null) {throw new RuntimeException("单例对象不能重复创建");}System.out.println("private Singleton()");}// 私有,静态,不可变private static final Singleton INSTANCE = new Singleton();public static Singleton getInstance() {return INSTANCE;}public static void otherMethod() {System.out.println("otherMethod()");}// 防止反序列化破坏单例public Object readResolve() {return INSTANCE;}
}

枚举饿汉式

枚举饿汉式能天然防止反射、反序列化破坏单例

public enum Singleton {INSTANCE;private Singleton() {System.out.println("private Singleton()");}@Overridepublic String toString() {return getClass().getName() + "@" + Integer.toHexString(hashCode());}public static Singleton getInstance() {return INSTANCE;}public static void otherMethod() {System.out.println("otherMethod()");}
}

懒汉式

在第一次调用getInstance()方法时通过new创建对象,以后再次调用该方法时,直接返回第一次调用时创建的对象

public class Singleton implements Serializable {private Singleton() {System.out.println("private Singleton()");}private static Singleton INSTANCE = null;// 同步执行,避免线程问题public static synchronized Singleton getInstance() {if (INSTANCE == null) {INSTANCE = new Singleton();}return INSTANCE;}public static void otherMethod() {System.out.println("otherMethod()");}}

其实只有首次创建单例对象时才需要同步,但该代码实际上每次调用都会同步,因此有了下面的双检锁改进

双检锁懒汉式

public class Singleton implements Serializable {private Singleton() {System.out.println("private Singleton()");}private static volatile Singleton INSTANCE = null; // 可见性,有序性public static Singleton getInstance() {if (INSTANCE == null) {synchronized (Singleton.class) {if (INSTANCE == null) {INSTANCE = new Singleton();}}}return INSTANCE;}public static void otherMethod() {System.out.println("otherMethod()");}
}

为何必须加 volatile:

  • INSTANCE = new Singleton4() 不是原子的,分成 3 步:创建对象、调用构造、给静态变量赋值,其中后两步可能被指令重排序优化,变成先赋值、再调用构造
  • 如果线程1 先执行了赋值,线程2 执行到第一个 INSTANCE == null 时发现 INSTANCE 已经不为 null,此时就会返回一个未完全构造的对象

内部类懒汉式

public class Singleton implements Serializable {private Singleton() {System.out.println("private Singleton()");}private static class Holder {static Singleton INSTANCE = new Singleton();}public static Singleton getInstance() {return Holder.INSTANCE;}public static void otherMethod() {System.out.println("otherMethod()");}
}
  • 避免了双检锁的缺点

实例

JDK 中单例的体现

  • Runtime 体现了饿汉式单例
  • Console 体现了双检锁懒汉式单例
  • Collections 中的 EmptyNavigableSet 内部类懒汉式单例
  • ReverseComparator.REVERSE_ORDER 内部类懒汉式单例
  • Comparators.NaturalOrderComparator.INSTANCE 枚举饿汉式单例
http://www.dtcms.com/a/523127.html

相关文章:

  • 竞价网站做推广wordpress分类页数量
  • 山东网站制作策划广州专业制作网站
  • 长沙专业做网站公司有哪些手游推广平台代理
  • mvc做的网站怎么连接数据库建设银行网站会员有什么用
  • 网站设计机构排名南京企业建站系统模板
  • 永久免费的网站哪个好wordpress中文转拼音
  • php后台网站开发强强seo博客
  • c 网站开发环境成都网站开发外包公司
  • 石家庄网络营销网站推广目前网站开发技术
  • 服装设计有哪些网站技能培训学校
  • 做网线头子的顺序乌海seo公司
  • 用ps怎么做网站效果图wordpress虚拟商场
  • 具有品牌的常州做网站wordpress 获取主题路径
  • 网站开发英文翻译临海市城市建设规划局网站
  • 东莞市建设规划局网站拓客软件排行榜
  • 阜阳营销型网站建设海南网络广播电视台官网
  • 宁波网站制作工具怎样建设智能网站
  • c2c的网站有哪些多说评论插件对网站优化
  • 做自适应网站设计wordpress5.2
  • 做搜狗网站优化排名网络推广方案策划书
  • 购物网站源码下载建立良好的公共秩序教学设计
  • eclipse tomcat 网站开发营销网站流程与步骤
  • 网站备案 座机号码网站开发一般多少钱
  • 网站开发工程师岗位职责要求厦门制作网站企业
  • 网站排名软件优化巴中模板建站价格多少
  • 怎么用百度云做网站空间开个电商公司需要多少钱
  • 2014 个人网站备案织梦网站地图在线生成
  • 网站建设协调机制中融木业网站是那个网站做的
  • 企业网站建设的类型有哪些数字营销公司排名
  • 北京网站改版哪家好微信嵌入手机网站