单例模式之Initialization Demand Holder (IoDH)
来源:互联网 发布:浮雕设计软件 编辑:程序博客网 时间:2024/05/18 01:20
一种更好的单例实现方法
饿汉式单例类不能实现延迟加载,不管将来用不用始终占据内存;懒汉式单例类线程安全控制烦琐,而且性能受影响。可见,无论是饿汉式单例还是懒汉式单例都存在这样那样的问题,有没有一种方法,能够将两种单例的缺点都克服,而将两者的优点合二为一呢?答案是:Yes!下面我们来学习这种更好的被称之为Initialization Demand Holder (IoDH)的技术。
在IoDH中,我们在单例类中增加一个静态(static)内部类,在该内部类中创建单例对象,再将该单例对象通过getInstance()方法返回给外部使用,实现代码如下所示:
编译并运行上述代码,运行结果为:true,即创建的单例对象s1和s2为同一对象。由于静态单例对象没有作为Singleton的成员变量直接实例化,因此类加载时不会实例化Singleton,第一次调用getInstance()时将加载内部类HolderClass,在该内部类中定义了一个static类型的变量instance,此时会首先初始化这个成员变量,由Java虚拟机来保证其线程安全性,确保该成员变量只能初始化一次。由于getInstance()方法没有任何线程锁定,因此其性能不会造成任何影响。
通过使用IoDH,我们既可以实现延迟加载,又可以保证线程安全,不影响系统性能,不失为一种最好的Java语言单例模式实现方式(其缺点是与编程语言本身的特性相关,很多面向对象语言不支持IoDH)。
练习
分别使用饿汉式单例、带双重检查锁定机制的懒汉式单例以及IoDH技术实现负载均衡器LoadBalancer。
至此,三种单例类的实现方式我们均已学习完毕,它们分别是饿汉式单例、懒汉式单例以及IoDH。
【作者:刘伟 http://blog.csdn.NET/lovelion】
- 单例模式之Initialization Demand Holder (IoDH)
- Java单例模式之initialization on demand holder
- Initialization-on-demand holder idiom 单例
- Java单例模式的各种写法(Initialization on Demand Holder模式)
- 线程安全又支持延迟加载的单例模式——Initialization on demand holder
- 线程的单例模式与延迟加载中的Initialization on Demand Holder
- 单例模式之Lazy initialization holder class模式
- initialization on demand holder
- Initialization Demand Holder
- 几种单例模式 尤其Initialization on demand holder模式
- 几种单例模式 尤其Initialization on demand holder模式
- 几种单例模式 尤其Initialization on demand holder模式
- 几种单例模式 尤其Initialization on demand holder模式
- Initialization-on-demand holder idiom
- Initialization-on-demand holder idiom
- IoDH实现的单例模式
- IoDH 实现的单例模式
- IoDH实现的单例模式
- [LeetCode]--14. Longest Common Prefix
- Java-Review-Note 目录
- VOLTE学习笔记(二)——IMS相关标识及SIP知识
- HDU 1394 Minimum Inversion Number (求逆序对数)
- Android CheckBox 控件突然报错
- 单例模式之Initialization Demand Holder (IoDH)
- Windows下ADB命令使用
- tomcat结合nginx使用小结
- bash脚本纪录
- 网易云音乐地址解析含官方接口分享
- aws的rds导出问题
- Android中Drawable适配介绍
- Periodic Signal BeiJing 2016 区域赛
- vue.js下载