博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
单例模式分类之懒汉式与饿汉式
阅读量:6217 次
发布时间:2019-06-21

本文共 975 字,大约阅读时间需要 3 分钟。

      首先,让我们来看一下单例模式的定义:单例模式是一种常见的设计模式,它要保证全局只有一个实例,那为了保证这个最基本的条件,它必须提供静态的创建方法,作为一个引用。

      所谓的"懒汉式"与"饿汉式",说白了就是建立单例对象的时间不同罢了——即:在类加载时实例化,还是在需要的时候实例化的问题。

“懒汉式”是在你真正用到的时候才去实例化单例对象,例如下面的代码:

 

// 懒汉式加载(延迟加载)  【部分代码】	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;	}

       可以看到,饿汉式单例模式,是直接加载的,也就是说,在类加载的时候,就会创建单例对象,不管你用不用得到,它不会带来线程安全问题,但它会带来另外一个问题——效率问题,如果是一个工厂模式,缓存了很多实例,那么就得考虑效率问题,因为这个类一加载则把所有实例不管用不用一块创建。

 

     

       这里只是对单例模式两种分类做了一个简单的对比,至于到底要用哪种方法,还是要回归到具体的业务中,小的项目中,这两种方式都可以使用,差别不是很大,但考虑到大项目的时候,就需要思考一番了。

 

转载地址:http://ozlja.baihongyu.com/

你可能感兴趣的文章
[MicroPython]TurniBit开发板DIY自动窗帘模拟系统
查看>>
由String类的Split方法所遇到的两个问题
查看>>
Python3.4 12306 2015年3月验证码识别
查看>>
从Handler.post(Runnable r)再一次梳理Android的消息机制(以及handler的内存泄露)
查看>>
自制操作系统Antz day11——实现shell(下)命令响应
查看>>
windows查看端口占用
查看>>
strongswan ikev2 server on ubuntu 14.04
查看>>
Yii用ajax实现无刷新检索更新CListView数据
查看>>
JDBC的事务
查看>>
linux服务器CPU参数/proc/cpuinfo
查看>>
haystack+Elasticsearch搜素引擎
查看>>
UEFI系统安装U盘的制作方式
查看>>
读《Oracle DBA工作笔记》知识点-获取创建语句
查看>>
Io流的概述
查看>>
js功能实现top轮播图
查看>>
App 卸载记录
查看>>
TCAM 与CAM
查看>>
POJ 3667 & HDU 3308 & HDU 3397 线段树的区间合并
查看>>
JQuery 的Ajax的使用
查看>>
jmeter设置json断言
查看>>