java单例模式的心得

  由于设计模式对于java高级开发人员来说是非常重要的,网上也有很多关于设计模式的文章,博客等。所以,首先我对相对简单的单例模式做一个简单的总结。

 

  一、实现方式

  单例模式的实现方式有3种,分别是饿汉式,懒汉式,IoDH这3种,下面分别介绍下每种的实现原理和优缺点。

  a)饿汉式

  实现原理:类具有一个静态成员变量,且初始化的值是一个实例化的对象本身。

  优点:即使多线程并发访问也可确保只有一个唯一的对象;在获取对象时候,可以快速响应。

  缺点:类加载时就创建了对象,导致资源利用率不高。

 

  b)懒汉式

  实现原理:在静态方法里创建对象;成员变量用volatile修饰,方法用通过双重检查锁定实现。

  优点:延迟加载,提升了内存资源利用率。

  缺点:因volatile关键字会屏蔽java虚拟机做的一些代码优化,所以系统运行效率降低。

  

  c)IoDH (Initialization Demand Holder)

  实现原理:添加一个静态内部类,在该内部类中创建单例对象,再将该单例对象通过getInstance()方法返回给外部使用,由Java虚拟机来保证其线程安全性。

  优点:延迟加载,既可以保证线程安全,又不影响系统性能。

  缺点:与语言本身的特性有关(因为由Java虚拟机来保证其线程安全性),很多面向对象语言不支持IoDH。

 

  二、单例模式应用场景

  数据库连接池,线程池,日志处理,计数器,sevice和dao通常也是单例的。

posted @ 2017-08-20 12:43  晚风劲疾  阅读(555)  评论(0编辑  收藏  举报