单例模式(四)

来源:互联网 发布:集成吊顶计算软件 编辑:程序博客网 时间:2024/06/07 05:09

单例模式(四)

由前三篇的分析,我们该怎么实现既能达到饿汉式中不用繁琐的线程控制进而影响系统性能的方式实现单例模式,又能达到懒汉式的延迟加载的效果呢?实现该效果要用到被称为IoDH的技术。不多说,直接上代码:

public class IoDHSingle {private IoDHSingle() {// TODO Auto-generated constructor stub}private static class HolderClass{private final static IoDHSingle instance=new IoDHSingle();}public static IoDHSingle getInstance() {return HolderClass.instance;}}

为什么以上代码可以实现想要的效果呢?关键在增加了一个静态内部类。

1)代码中没有繁琐的线程控制代码,我们可以达到饿汉式的效果;

2)静态变量不是IoDHSingle的成员变量,所以在加载类IoDHSingle时,不会初始化变量,而是在调用getInstance时,虚拟机加载HolderClass类,进而再初始化变量instance,因此,达到了延迟加载的效果;

这时大家会问,那多线程访问 的时候,是怎么保证单例的呢?这里是靠java虚拟机来保证其线程安全性的,这里也带来了一个缺点,就是该方法依赖编程语言的特性,不过该方法也算是在java中实现单例模式的最佳方式了。

通过以上的分析,我们再一次体会到,程序真的没有最好,只有更好。

那单例模式在声明情况下使用呢?先想想,看单例模式最后一篇的总结吧---单例模式(五)


0 0
原创粉丝点击