全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

详解java 单例模式及方法总结

java设计模式--单例模式

 单例设计模式

Singleton是一种创建型模式,指某个类采用Singleton模式,则在这个类被创建后,只可能产生一个实例供外部访问,并且提供一个全局的访问点。

核心知识点如下:

(1) 将采用单例设计模式的类的构造方法私有化(采用private修饰)。

(2) 在其内部产生该类的实例化对象,并将其封装成private static类型。

(3) 定义一个静态方法返回该类的实例。

/** 
 * 方法一
 * 单例模式的实现:饿汉式,线程安全 但效率比较低 
 */ 
public class SingletonTest { 

  // 定义一个私有的构造方法
  private SingletonTest() { 
  } 

  // 将自身的实例对象设置为一个属性,并加上Static和final修饰符
  private static final SingletonTest instance = new SingletonTest(); 

  // 静态方法返回该类的实例
  public static SingletonTest getInstancei() { 
    return instance; 
  } 
 
}

方法一就是传说的中的饿汉模式

优点是:写起来比较简单,而且不存在多线程同步问题,避免了synchronized所造成的性能问题;

缺点是:当类SingletonTest被加载的时候,会初始化static的instance,静态变量被创建并分配内存空间,从这以后,这个static的instance对象便一直占着这段内存(即便你还没有用到这个实例),当类被卸载时,静态变量被摧毁,并释放所占有的内存,因此在某些特定条件下会耗费内存。

/** 
 *方法二
 * 单例模式的实现:饱汉式,非线程安全  
 *  
 */ 
public class SingletonTest {

  // 定义私有构造方法(防止通过 new SingletonTest()去实例化)
  private SingletonTest() {  
  }  

  // 定义一个SingletonTest类型的变量(不初始化,注意这里没有使用final关键字)
  private static SingletonTest instance;  

  // 定义一个静态的方法(调用时再初始化SingletonTest,但是多线程访问时,可能造成重复初始化问题)
  public static SingletonTest getInstance() {  
    if (instance == null)  
      instance = new SingletonTest();  
    return instance;  
  }  
} 

方法二就是传说的中的饱汉模式

优点是:写起来比较简单,当类SingletonTest被加载的时候,静态变量static的instance未被创建并分配内存空间,当getInstance方法第一次被调用时,初始化instance变量,并分配内存,因此在某些特定条件下会节约了内存;

缺点是:并发环境下很可能出现多个SingletonTest实例。

/** 
 *方法三
 * 单例模式的实现:饱汉式,线程安全简单实现  
 *  
 */ 
public class SingletonTest {

  // 定义私有构造方法(防止通过 new SingletonTest()去实例化)
  private SingletonTest() {  
  }  

  // 定义一个SingletonTest类型的变量(不初始化,注意这里没有使用final关键字)
  private static SingletonTest instance;  

  // 定义一个静态的方法(调用时再初始化SingletonTest,使用synchronized 避免多线程访问时,可能造成重的复初始化问题)
  public static synchronized SingletonTest getInstance() {  
    if (instance == null)  
      instance = new SingletonTest();  
    return instance;  
  }  
} 

方法三为方法二的简单优化

优点是:使用synchronized关键字避免多线程访问时,出现多个SingletonTest实例。

缺点是:同步方法频繁调用时,效率略低。

/** 
 * 方法四
 * 单例模式最优方案
 * 线程安全 并且效率高 
 * 
 */ 
public class SingletonTest { 

  // 定义一个私有构造方法
  private SingletonTest() { 
   
  }  
  //定义一个静态私有变量(不初始化,不使用final关键字,使用volatile保证了多线程访问时instance变量的可见性,避免了instance初始化时其他变量属性还没赋值完时,被另外线程调用)
  private static volatile SingletonTest instance; 

  //定义一个公有的静态方法,返回该类型实例
  public static SingletonTest getIstance() { 
    // 对象实例化时与否判断(不使用同步代码块,instance不等于null时,直接返回对象,提高运行效率)
    if (instance == null) {
      //同步代码块(对象未初始化时,使用同步代码块,保证多线程访问时对象在第一次创建后,不再重复被创建)
      synchronized (SingletonTest.class) {
        //未初始化,则初始instance变量
        if (instance == null) {
          instance = new SingletonTest();  
        }  
      }  
    }  
    return instance;  
  }  
}

方法四为单例模式的最佳实现。内存占用地,效率高,线程安全,多线程操作原子性。 

(事实上,可以通过Java反射机制来实例化private类型的构造方法,此时基本上会使所有的Java单例实现失效。本帖不讨论反射情况下问题,默认无反射,也是常见的面试已经应用场景)

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# java  # 单例模式  # 单例模式详解  # Java单例模式简单介绍  # Java单例模式实现静态内部类方法示例  # java 单例模式(饿汉模式与懒汉模式)  # java设计模式之单例模式解析  # JAVA 枚举单例模式及源码分析的实例详解  # java设计模式之单例模式的详解及优点  # java 单例模式和工厂模式实例详解  # JAVA多线程并发下的单例模式应用  # java 单例模式的实例详解  # 多线程  # 多个  # 时再  # 加载  # 是一种  # 还没  # 本帖  # 你还  # 这段  # 效率高  # 在某些  # 可以通过  # 希望能  # 不存在  # 很可能  # 较低  # 会使  # 谢谢大家  # 提供一个  # 设置为 


相关文章: c# await 一个已经完成的Task会发生什么  视频网站app制作软件,有什么好的视频聊天网站或者软件?  昆明高端网站制作公司,昆明公租房申请网上登录入口?  网站代码制作软件有哪些,如何生成自己网站的代码?  国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?  企业网站制作费用多少,企业网站空间一般需要多大,费用是多少?  黑客如何通过漏洞一步步攻陷网站服务器?  如何快速生成可下载的建站源码工具?  香港服务器如何优化才能显著提升网站加载速度?  C#怎么使用委托和事件 C# delegate与event编程方法  如何配置IIS站点权限与局域网访问?  购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?  网站制作免费,什么网站能看正片电影?  如何通过西部数码建站助手快速创建专业网站?  网站制作网站,深圳做网站哪家比较好?  个人网站制作流程图片大全,个人网站如何注销?  道歉网站制作流程,世纪佳缘致歉小吴事件,相亲网站身份信息伪造该如何稽查?  如何在Golang中使用encoding/gob序列化对象_存储和传输数据  陕西网站制作公司有哪些,陕西凌云电器有限公司官网?  网站制作多少钱一个,建一个论坛网站大约需要多少钱?  建站之星IIS配置教程:代码生成技巧与站点搭建指南  临沂网站制作企业,临沂第三中学官方网站?  外贸公司网站制作,外贸网站建设一般有哪些步骤?  网站制作话术技巧,网站推广做的好怎么话术?  网站好制作吗知乎,网站开发好学吗?有什么技巧?  建站之星免费模板:自助建站系统与智能响应式一键生成  手机网站制作与建设方案,手机网站如何建设?  网站制作中优化长尾关键字挖掘的技巧,建一个视频网站需要多少钱?  如何在建站宝盒中设置产品搜索功能?  建站主机服务器选购指南:轻量应用与VPS配置解析  建站之星与建站宝盒如何选择最佳方案?  湖州网站制作公司有哪些,浙江中蓝新能源公司官网?  整人网站在线制作软件,整蛊网站退不出去必须要打我是白痴才能出去?  广东专业制作网站有哪些,广东省能源集团有限公司官网?  建站之星如何开启自定义404页面避免用户流失?  免费制作海报的网站,哪位做平面的朋友告诉我用什么软件做海报比较好?ps还是cd还是ai这几个软件我都会些我是做网页的?  广东企业建站网站优化与SEO营销核心策略指南  佛山网站制作系统,佛山企业变更地址网上办理步骤?  合肥做个网站多少钱,合肥本地有没有比较靠谱的交友平台?  代刷网站制作软件,别人代刷火车票靠谱吗?  成都网站制作价格表,现在成都广电的单独网络宽带有多少的,资费是什么情况呢?  c# 在高并发下使用反射发射(Reflection.Emit)的性能  如何通过服务器快速搭建网站?完整步骤解析  教学网站制作软件,学习*后期制作的网站有哪些?  C++中引用和指针有什么区别?(代码说明)  保定网站制作方案定制,保定招聘的渠道有哪些?找工作的人一般都去哪里看招聘信息?  SAX解析器是什么,它与DOM在处理大型XML文件时有何不同?  制作假网页,招聘网的薪资待遇,会有靠谱的吗?一面试又各种折扣?  如何获取开源自助建站系统免费下载链接?  合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。