全国统一服务热线

400-035-8011

  • 洛阳达内教育IT培训学校
  • 洛阳达内教育IT培训学校
  • 洛阳达内教育IT培训学校

三种单例模式实现介绍

三种单例模式实现介绍
  假如面试时问到实现三种单例模式相关的知识,回答围绕懒汉式单例、饿汉式单例、双重检查等就可以了,下面我给大家详细回答一下这些知识点。
  单例模式定义:确保一个类只有一个实例,并提供一个访问它的全局访问点!
 懒汉,线程不安全
  这种写法可以在多线程中很好地工作,看起来也有很好的lazyloading。但遗憾的是效率很低,99%不需要同步。
 饿汉
  这种方法基于classloder机制避免了多线程同步问题,instance在类装载中实例化。现在java单例是指一台虚拟机的范围,因为装载类的功能是虚拟机,所以当一台虚拟机通过自己的ClassLoader装载饿汉式来实现单例类时,就会创建一个类实例。

  这意味着虚拟机中有许多classLoader,如果这些classloader可以装载某一类,即使这一类是单一的,也可以产生许多实例。当然,如果一台机器上有很多虚拟机,每台虚拟机中至少有一个这样的例子,那么它就不会是单一的例子。

三种单例模式实现介绍

 静态内部类
  这种方法还利用classloder的机制来增加instance初始化时只有一个线程。这种方法装载了Singleton类,instance不一定初始化。由于SingletonHolder类没有被主动使用,只有当显示通过调用getinstance方法时,才会显示装载SingletonHolder类,从而实例化instance。
  想象一下,如果instance实例消耗资源,我想让他延迟加载!此时,与第二种方法相比,这种方法非常合理。
 枚举
  这是EffectiveJava作者JoshBloch所倡导的一种方式,它不仅可以避免多线程同步的问题,而且可以防止反序列化重新创建新的对象,可谓是非常坚强的壁垒啊,不过,个人认为由于1.5中加入了enum特性,用这种方式写不免让人觉得生疏,在实际工作中,我也很少看到有人这样写。
 双重校验锁(jdk1.5)
  这样就可以安全地创建线程实例,而不会对性能产生太大影响。这只是次创建实例时同步,以后就不需要同步了。
  因为volatile关键词屏蔽了虚拟机中一些必要的代码优化,运行效率不是很高,建议不要使用。不建议大量使用双重检查锁的单例,根据情况决定。

尊重原创文章,转载请注明出处与链接:http://www.mxiao.cn/1541/new/138792/违者必究! 以上就是洛阳达内教育IT培训中心 小编为您整理三种单例模式实现介绍的全部内容。

推荐课程 / RECOMMENDED COURSE

  • 洛阳Java互联网架构师培训班

  • 洛阳达内Python人工智能培训班

  • 洛阳达内c++语言开发培训班

  • 洛阳达内UID全链路设计培训班

  • 查看更多>>

定制专属于你的课程

10秒登记,定制专属于你的课程方案

填写下表,让专业老师根据你的性格爱好选择最适合你的。

版权所有:洛阳达内教育IT培训中心

温馨提示:提交留言后老师会第一时间与您联系!热线电话:400-035-8011