java单例模式的心得

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

  一、实现方式

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

  a)饿汉式

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

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

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

  b)懒汉式

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

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

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

  

  c)IoDH (Initialization Demand Holder)

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

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

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

  二、单例模式应用场景

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

时间: 2024-08-25 11:44:04

java单例模式的心得的相关文章

【深入】java 单例模式(转)

[深入]java 单例模式 关于单例模式的文章,其实网上早就已经泛滥了.但一个小小的单例,里面却是有着许多的变化.网上的文章大多也是提到了其中的一个或几个点,很少有比较全面且脉络清晰的文章,于是,我便萌生了写这篇文章的念头.企图把这个单例说透,说深入.但愿我不会做的太差. 首先来看一个典型的实现: 1 /** 2 * 基础的单例模式,Lazy模式,非线程安全 3 * 优点:lazy,初次使用时实例化单例,避免资源浪费 4 * 缺点:1.lazy,如果实例初始化非常耗时,初始使用时,可能造成性能问

JAVA单例模式的实践

单例模式是JAVA设计模式中最常用.最重要的设计模式之一. 最简单的写法是: public class TestSingleton { private static String ourInstance = null; //私有化构造器 private TestSingleton() { } //提供静态方法给外部访问 public static String getOurInstance(){ if(ourInstance == null){ ourInstance="单例模式赋值成功!!!&

Java 单例模式探讨

以下是我再次研究单例(Java 单例模式缺点)时在网上收集的资料,相信你们看完就对单例完全掌握了 Java单例模式应该是看起来以及用起来简单的一种设计模式,但是就实现方式以及原理来说,也并不浅显哦. 总结一下我所知道的单例模式实现方式: 1.预先加载法 Java代码 class S1 { private S1() { System.out.println("ok1"); } private static S1 instance = new S1(); public static S1

【转】10个关于java单例模式的面试问题

10 interview question on Singleton Pattern in Java Question starts with What is Singleton class? Have you used Singleton before? Singleton is a class which has only one instance in whole application and provides a getInstance() method to access the s

你所知道的Java单例模式并不是单例模式

当我们搜索单例模式的时候,能看到很多例子,什么懒汉式.饿汉式,大概如下: public class Singleton { private static Singleton instance=null; private Singleton(){ System.out.println("Singleton..init..."); } public static Singleton getInstance(){ if(instance==null){ instance=new Single

java单例模式【csdn-炸死特】

概念: java中单例模式是一种常见的设计模式,单例模式分三种:懒汉式单例.饿汉式单例.登记式单例三种. 单例模式有一下特点: 1.单例类只能有一个实例. 2.单例类必须自己自己创建自己的唯一实例. 3.单例类必须给所有其他对象提供这一实例. 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例.在计算机系统中,线程池.缓存.日志对象.对话框.打印机.显卡的驱动程序对象常被设计成单例.这些应用都或多或少具有资源管理器的功能.每台计算机可以有若干个打印机,但只能有一个Printe

深入Java单例模式(转)

深入Java单例模式 源自 http://devbean.blog.51cto.com/448512/203501 在GoF的23种设计模式中,单例模式是比较简单的一种.然而,有时候越是简单的东西越容易出现问题.下面就单例设计模式详细的探讨一下. 所谓单例模式,简单来说,就是在整个应用中保证只有一个类的实例存在.就像是Java Web中的application,也就是提供了一个全局变量,用处相当广泛,比如保存全局数据,实现全局性的操作等. 1. 最简单的实现 首先,能够想到的最简单的实现是,把类

java单例模式案例

</pre>单例模式是一种常见的设计模式,一般有三种方式,单例模式具有如下特点:<p></p><p><span style="white-space:pre">1.在类的属性中,自己初始化一个静态的私有的类实例<span style="white-space:pre"></span>2.将自己的构造方法写成private的方式,拒绝其他类或者操作再次使用构造函数将单例类再次实例化&l

Java单例模式的3种实现方法及特点

最近看到一篇关于Java中instance的文章(http://www.zhihu.com/question/29971746),引发对单例模式的一些思考,并从网上搜集了一些关于Java单例模式的文章,总结如下: 首先,贴出三种单例设计的简单代码: 1.延迟加载——不考虑效率问题的延迟加载 public class SingleTon{ private static SingleTon instance = null; public static synchronized SingleTon g