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

建立网站 知乎自己做免费网站

建立网站 知乎,自己做免费网站,用dw做电子商务网站步骤,近三天发生的大事目录 一、五种单例模式的实现方式 1.饿汉模式 2.饿汉枚举类型 3.懒汉式 4.双检锁懒汉式 5.内部类懒汉式 二、JDK 中单例的体现 一、五种单例模式的实现方式 1.饿汉模式 public class Singleton1 implements Serializable {private Singleton1() {if (INSTANCE ! null) {thro…

目录

一、五种单例模式的实现方式

        1.饿汉模式

        2.饿汉枚举类型

        3.懒汉式

        4.双检锁懒汉式

        5.内部类懒汉式

二、JDK 中单例的体现


一、五种单例模式的实现方式

        1.饿汉模式

public class Singleton1 implements Serializable {private Singleton1() {if (INSTANCE != null) {throw new RuntimeException("单例对象不能重复创建");}System.out.println("private Singleton1()");}private static final Singleton1 INSTANCE = new Singleton1();public static Singleton1 getInstance() {return INSTANCE;}public static void otherMethod() {System.out.println("otherMethod()");}public Object readResolve() {return INSTANCE;}
}
  • 构造方法抛出异常是防止反射破坏单例

  • readResolve() 是防止反序列化破坏单例

        2.饿汉枚举类型

public enum Singleton2 {INSTANCE;private Singleton2() {System.out.println("private Singleton2()");}@Overridepublic String toString() {return getClass().getName() + "@" + Integer.toHexString(hashCode());}public static Singleton2 getInstance() {return INSTANCE;}public static void otherMethod() {System.out.println("otherMethod()");}
}
  • 枚举饿汉式能天然防止反射、反序列化破坏单例

        3.懒汉式

public class Singleton3 implements Serializable {private Singleton3() {System.out.println("private Singleton3()");}private static Singleton3 INSTANCE = null;// Singleton3.classpublic static synchronized Singleton3 getInstance() {if (INSTANCE == null) {INSTANCE = new Singleton3();}return INSTANCE;}public static void otherMethod() {System.out.println("otherMethod()");}}
  • 其实只有首次创建单例对象时才需要同步,但该代码实际上每次调用都会同步

  • 因此有了下面的双检锁改进

        4.双检锁懒汉式

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

为何必须加 volatile:

  • INSTANCE = new Singleton4() 不是原子的,分成 3 步:创建对象、调用构造、给静态变量赋值,其中后两步可能被指令重排序优化,变成先赋值、再调用构造

  • 如果线程1 先执行了赋值,线程2 执行到第一个 INSTANCE == null 时发现 INSTANCE 已经不为 null,此时就会返回一个未完全构造的对象

        5.内部类懒汉式

public class Singleton5 implements Serializable {private Singleton5() {System.out.println("private Singleton5()");}private static class Holder {static Singleton5 INSTANCE = new Singleton5();}public static Singleton5 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.yayakq.cn/news/885909/

相关文章:

  • 做嗳啪啪 网站寿光做网站的公司
  • 湖北网站建设服务手机版网站怎么上传
  • html前端网站开发PPT老年公寓网站模板
  • 网站技术介绍网站建设需要匹配人员
  • 想给公司做个网站 怎么做动漫设计工作室网站宣传片制作
  • c#网站开发 pdf4s店网站建设方案
  • 正规的网站制作在哪里上海企业网络营销推广服务
  • 网站后台权限管理用手机怎么做免费网站
  • 移动互联网开发的发展历史白山网站seo
  • 护肤网站的功能设计活动页面图片
  • 制作公司网站设计要求可以看任何东西的浏览器
  • 门户网站意义企业网站建设的经费预算
  • 创建一个网站需要什么条件市北区开发建设局 网站
  • 百度校招系统优化app
  • 建网站要花费多少钱做网站类的网站
  • 网站建设怎样容易黄金app
  • 成都 企业网站设计企业建设门户网站成本如何
  • 网站和搜索引擎如何做新网站保留域名
  • 企业网站计划书大连的网站制作公司
  • 网站建设资料需要公司提交的吗外国网站建站
  • 网站建设和优化那本书好metasploit wordpress
  • 东莞网站搜索排名wordpress 米课
  • 购物网站建设凡科网是干嘛用的
  • 哪个旅游网站规划好wordpress 淘客帝国
  • 做美图 网站有哪些东西吗石家庄市建设网站
  • 公司企业做网站好做吗建设基础化学网站的经验
  • 基础展示型网站和cms新网站建设特色
  • 淄博学校网站建设方案seo外包公司如何优化
  • 简单 手机 网站 源码wordpress分类访问不
  • 学做网站是什么淘宝客做软件网站app