首先,让我们来看一下单例模式的定义:单例模式是一种常见的设计模式,它要保证全局只有一个实例,那为了保证这个最基本的条件,它必须提供静态的创建方法,作为一个引用。
所谓的"懒汉式"与"饿汉式",说白了就是建立单例对象的时间不同罢了——即:在类加载时实例化,还是在需要的时候实例化的问题。
“懒汉式”是在你真正用到的时候才去实例化单例对象,例如下面的代码:
// 懒汉式加载(延迟加载) 【部分代码】
private static XmlConfigReader instance = null;
// 加锁,同步执行单例模式,防止多线程同时创建单例对象
public static synchronized XmlConfigReader getInstance() {
if (instance == null) {
instance = new XmlConfigReader();
}
return instance;
}
可以看到,懒汉式单例模式并不是类加载时就创建对象的,而是延迟到你需要的时候才进行实例化,这样会出现线程安全的问题,因此需要对其进行加锁,这样能有效方式多个线程同时实例化一个对象。
“饿汉式”是在不管你用不用,一开始就创建单例对象,这里的一开始,指的是该类加载的时候,例如下面的代码:
// 饿汉式加载 (直接加载) 【部分代码】
private static XmlConfigReader instance = new XmlConfigReader();
private XmlConfigReader() {
}
public static XmlConfigReader getInstance() {
return instance;
}
可以看到,饿汉式单例模式,是直接加载的,也就是说,在类加载的时候,就会创建单例对象,不管你用不用得到,它不会带来线程安全问题,但它会带来另外一个问题——效率问题,如果是一个工厂模式,缓存了很多实例,那么就得考虑效率问题,因为这个类一加载则把所有实例不管用不用一块创建。
这里只是对单例模式两种分类做了一个简单的对比,至于到底要用哪种方法,还是要回归到具体的业务中,小的项目中,这两种方式都可以使用,差别不是很大,但考虑到大项目的时候,就需要思考一番了。
分享到:
相关推荐
java 单例模式(懒汉式与饿汉式).docx
使用单例模式创建学生管理系统(饿汉式、懒汉式)
单例模式(有常用的懒汉式单例类,饿汉式单例类)
c++单例模式 懒汉式和饿汉式
主要介绍了java 单例模式的相关资料,这里对懒汉式与饿汉式都做了实例介绍,需要的朋友可以参考下
主要介绍了Java设计模式之单例模式,简单说明了单例模式的原理并结合具体实例形式分析了单例模式中懒汉式与饿汉式的具体实现与使用技巧,需要的朋友可以参考下
单例模式主要有懒汉式和饿汉式两种实现,饿汉式不会有线程安全的问题,但是提前构造对象占用了一定的资源,如果对内存要求较低的场景可以使用饿汉式实现;懒汉式应使用DCL机制来避免多线程竞争资源的问题,并且懒汉...
是http://blog.csdn.net/lxq_xsyu/article/category/1544127博客中java设计模式的源代码。下载前请先看《设计模式——单例模式》一文。
设计模式之单例模式 懒汉式,饿汉式,同步枷锁
java实现的单例模式,包含懒汉式和饿汉式,适合java入口
本文档比较清晰明了地介绍了懒汉式以及懒汉式(我要对象的时候才给我创建)和饿汉式(我不要对象的时候你也给我创建)的区别;懒汉式只有你调用返回对象的方法时才调用对象,饿汉式是在类加载的时候就创建了对象;...
java单例设计模式-饿汉式-懒汉式[参照].pdf
java单例设计模式-饿汉式-懒汉式[归纳].pdf
一个简单的java工程,包含注释,一目了然,其中包含了单例模式的所有实现方式,懒汉式,饿汉式,双重校验,枚举,静态内部类等方式实现单例。
Java单例中的简单例子
c++设计模式-创建型模式-单例模式源码,懒汉式 饿汉式源码,qt工程,单例模式线程安全问题,单例模式实现方式
单例模式的七种实现方法以及分析,可以作文大作业提交 1.前言 4 1.1 课题的研究背景 4 1.2 课题主要研究目标 4 2.相关技术简介 4 2.1Java简介 4 2.2IDEA简介 4 3. 单例模式的7种实现方式 5 3.1饿汉式(使用静态常量...
细心整合和单例模式和工厂模式的几种模型,懒汉式,饿汉式,如何并发操作模式,等都有详细讲解
下面小编就为大家带来一篇老生常谈C++的单例模式与线程安全单例模式(懒汉/饿汉)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧