- 浏览: 139877 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (138)
- java基础 (26)
- 日常工作经验总结 (22)
- SVN学习与使用 (1)
- JBOSS学习与实践 (1)
- webService学习与实践 (4)
- redis学习与实践 (12)
- spring学习与实践 (0)
- hibernate学习与实践 (4)
- Struts2学习与实践 (0)
- mybatis学习与实践 (0)
- SpringMVC学习与实践 (0)
- jfreechart学习与使用 (0)
- javaScript学习与实践 (1)
- linux学习与实践 (4)
- Python学习与实践 (7)
- Oracle学习与实践 (21)
- Mysql学习与实践 (4)
- HTML5+CSS3学习与实践 (0)
- DIV+CSS学习与实践 (0)
- tomcat学习与实践 (1)
- mongodb学习与实践 (1)
- Git学习与实践 (2)
- hadhoop学习与实践 (0)
- shiro学习与实践 (0)
- CMS学习与实践 (0)
- Jmeter学习与实践 (0)
- java测试学习与实践 (2)
- bootstrap学习与实践 (0)
- jquery学习与实践 (0)
- Spring+hibernate+Struts2框架开发CRM项目 (0)
- JVM学习与实践 (0)
- 推荐学习网站 (1)
- 日常工作必备小技能 (4)
- Apache实践 (1)
- dubbo学习与实践 (2)
- Centos7 (6)
- 面试题目集合(收集各大网站) (4)
- 大数据学习 (1)
- 财富本 (2)
- 股票投资学习 (0)
- ZooKeeper (0)
- python切割集合里面相同的元素到一个集合里面 (1)
- 机器学习与深度学习 (1)
最新评论
-
魏叔武:
...
基于UDP协议的Socket编程
单例模式的作用:
/**
* 单例对象(Singleton)是一种常用的设计模式。在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在。这样的模式有几个好处:
*
*1、某些类创建比较频繁,对于一些大型的对象,这是一笔很大的系统开销。
*
*2、省去了new操作符,降低了系统内存的使用频率,减轻GC压力。
*
* 3、有些类如交易所的核心交易引擎,控制着交易流程,如果该类可以创建多个的话,系统完全乱了。
*(比如一个军队出现了多个司令员同时指挥,肯定会乱成一团),所以只有使用单例模式,才能保证核心交易服务器独立控制整个流程。
*/
懒汉式单例
何为懒汉式单例呢,可以这样理解,单例模式呢,其在整个应用程序的生命周期中只存在一个实例,
懒汉式呢,就是这个单例类的这个唯一实例是在第一次使用 GetInstance()时实例化的,
如果您不调用 GetInstance()的话,这个实例是不会存在的,即为 null
形象点说呢,就是你不去动它的话,它自己是不会实例化的,所以可以称之为懒汉。
其实呢,我前面在介绍单例模式的这几个 Demo 中都是使用的懒汉式单例,
看下面的 GetInstance()方法就明白了:
从上面的这个 GetInstance()中可以看出这个单例类的唯一实例是在第一次调用 GetInstance()时实例化的,
所以此为懒汉式单例。
饿汉式单例
上面介绍了饿汉式单例,到这里来理解懒汉式单例的话,就容易多了,懒汉式单例由于人懒,
所以其自己是不会主动实例化单例类的唯一实例的,而饿汉式的话,则刚好相反,
其由于肚子饿了,所以到处找东西吃,人也变得主动了很多,所以根本就不需要别人来催他实例化单例类的为一实例,
其自己就会主动实例化单例类的这个唯一类。
在 C# 中,可以用特殊的方式实现饿汉式单例,即使用静态初始化来完成饿汉式单例模式
下面就来看一看饿汉式单例类
要先在这里提一下的是使用静态初始化的话,无需显示地编写线程安全代码,
C# 与 CLR 会自动解决前面提到的懒汉式单例类时出现的多线程同步问题。
上面的饿汉式单例类中可以看到,当整个类被加载的时候,就会自行初始化 singleton 这个静态只读变量。
而非在第一次调用 GetInstance()时再来实例化单例类的唯一实例,所以这就是一种饿汉式的单例类。
备注:
一、单例模式是用来实现在整个程序中只有一个实例的。
二、单例类的构造函数必须为私有,同时单例类必须提供一个全局访问点。
三、单例模式在多线程下的同步问题和性能问题的解决。
四、懒汉式和饿汉式单例类
参考的文章地址:
http://www.cnblogs.com/BoyXiao/archive/2010/05/07/1729376.html?login=1
/**
* 单例对象(Singleton)是一种常用的设计模式。在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在。这样的模式有几个好处:
*
*1、某些类创建比较频繁,对于一些大型的对象,这是一笔很大的系统开销。
*
*2、省去了new操作符,降低了系统内存的使用频率,减轻GC压力。
*
* 3、有些类如交易所的核心交易引擎,控制着交易流程,如果该类可以创建多个的话,系统完全乱了。
*(比如一个军队出现了多个司令员同时指挥,肯定会乱成一团),所以只有使用单例模式,才能保证核心交易服务器独立控制整个流程。
*/
懒汉式单例
何为懒汉式单例呢,可以这样理解,单例模式呢,其在整个应用程序的生命周期中只存在一个实例,
懒汉式呢,就是这个单例类的这个唯一实例是在第一次使用 GetInstance()时实例化的,
如果您不调用 GetInstance()的话,这个实例是不会存在的,即为 null
形象点说呢,就是你不去动它的话,它自己是不会实例化的,所以可以称之为懒汉。
其实呢,我前面在介绍单例模式的这几个 Demo 中都是使用的懒汉式单例,
看下面的 GetInstance()方法就明白了:
public static Singleton GetInstance() { if (singleton == null) { lock (syncObject) { if (singleton == null) { singleton = new Singleton(); } } } return singleton; }
从上面的这个 GetInstance()中可以看出这个单例类的唯一实例是在第一次调用 GetInstance()时实例化的,
所以此为懒汉式单例。
饿汉式单例
上面介绍了饿汉式单例,到这里来理解懒汉式单例的话,就容易多了,懒汉式单例由于人懒,
所以其自己是不会主动实例化单例类的唯一实例的,而饿汉式的话,则刚好相反,
其由于肚子饿了,所以到处找东西吃,人也变得主动了很多,所以根本就不需要别人来催他实例化单例类的为一实例,
其自己就会主动实例化单例类的这个唯一类。
在 C# 中,可以用特殊的方式实现饿汉式单例,即使用静态初始化来完成饿汉式单例模式
下面就来看一看饿汉式单例类
namespace Singleton { public sealed class Singleton { private static readonly Singleton singleton = new Singleton(); private Singleton() { } public static Singleton GetInstance() { return singleton; } } }
要先在这里提一下的是使用静态初始化的话,无需显示地编写线程安全代码,
C# 与 CLR 会自动解决前面提到的懒汉式单例类时出现的多线程同步问题。
上面的饿汉式单例类中可以看到,当整个类被加载的时候,就会自行初始化 singleton 这个静态只读变量。
而非在第一次调用 GetInstance()时再来实例化单例类的唯一实例,所以这就是一种饿汉式的单例类。
备注:
一、单例模式是用来实现在整个程序中只有一个实例的。
二、单例类的构造函数必须为私有,同时单例类必须提供一个全局访问点。
三、单例模式在多线程下的同步问题和性能问题的解决。
四、懒汉式和饿汉式单例类
参考的文章地址:
http://www.cnblogs.com/BoyXiao/archive/2010/05/07/1729376.html?login=1
发表评论
-
jdk1.8切换1.7失效问题
2019-12-24 00:02 386项目需要jdk1.7,高了启动不了。会报错。 然而,我安装j ... -
map集合遍历
2017-09-05 16:10 487public class Test{ pu ... -
JVM调优总结(十)-调优方法
2017-07-30 21:45 0http://pengjiaheng.iteye.com/bl ... -
框架整合目标
2017-07-21 21:35 01, spring+hibernate+struts2+my ... -
java利用jxl.jar生成excel文档
2017-06-28 15:05 340java代码: package com.test.read ... -
利用jxl读取excel文件里面的内容
2017-06-28 14:23 432excel里面的内容: ... -
数组与集合互相转化
2017-04-21 20:20 330package com.ray.util; impo ... -
数组转化为集合
2017-04-16 21:07 803package com.ray.test; im ... -
快速排序
2017-03-31 14:32 350public class QuickSort { publ ... -
归并排序
2017-03-31 14:20 380public class mergeSort { ... -
希尔排序
2017-03-31 13:44 319public class shellSort { ... -
插入排序
2017-03-31 11:55 273插入排序的代码实现虽然没有冒泡排序和选择排序那么简单粗暴,但它 ... -
选择排序
2017-03-31 10:02 427选择排序是一种简单直观的排序算法,数据规模越小越好。唯一的好处 ... -
HTTP协议详解(真的很经典)
2017-03-27 14:14 356[b][b]HTTP是一个属于应用层的面向对象的协议,由于其简 ... -
多线程学习的几篇文章
2017-02-06 17:55 357Java多线程(一)、多线程的基本概念和使用 http:// ... -
java实现可变参数的方法
2017-02-06 17:16 339/** * * * @author Administr ... -
java实现日期的时间的加减
2017-02-06 17:11 1024/** * 时间的加减 * @author Adminis ... -
冒泡排序算法java
2016-12-07 15:22 404今天突然被人问到冒泡排序怎么解决,一时之间自己竟 ... -
FTP上传文件功能
2016-12-06 09:31 374ftp上传功能是很多的应用软件都必备的一个基础功能,特别是CM ... -
java基础之map集合遍历
2016-11-04 16:27 415由于map集合在平时用的时候都是直接get(key)取出单个值 ...
相关推荐
一个java线程安全的单例模式:饥饿模式和延迟加载
Java常用设计模式(SingleTon、FactoryMethod、AbstractFactory)
java Singleton单例模式 java Singleton单例模式
简单的单例模式举例Singleton 分为恶汉式 懒汉式
perl-Class-Singleton-1.4-6.el6.noarch.rpm perl-Class-Singleton-1.4-6.el6.noarch.rpm
设计模式-Singleton与Factory
Laravel开发-singleton-pattern 帮助程序包来实现单例类。
设计模式系列之01-单例模式(Singleton模式),很好的资源,理论实践结合讲述,逐步更新
Singleton模式包含的角色只有一个,就是Singleton。Singleton拥有一个私有构造函数,确保用户无法通过new直接实例化它。除此之外,该模式中包含一个静态私有成员变量instance与静态公有方法Instance()。Instance()...
Java的Singleton模式代码(免资源分),你会发现Java的Singleton模式真的很有趣,原来程序还可以这样写。
DataSource的单态模式(SingleTon)程序---马克-to-win java视频 数据源 单态模式 dataSource Singleton
adv-java-factory-singleton
JAVA设计模式-day2,请的行业大能讲得课程,涉及:创建模式(5种: 1、 工厂方法模式(Factory Method); 2、 抽象工厂模式; 3、 单例模式(Singleton) • 4、 建造者模式(Builder); 5、 原型模式(Prototype...
python库。 资源全名:django-singleton-admin-0.0.2.macosx-10.7-intel.exe
java singleton 不解释不解释不解释不解释
资源来自pypi官网。 资源全名:dask-actor-singleton-1.1.0.tar.gz
- 单例模式(Singleton) - 建造者模式(Builder) - 原型模式(Prototype) - 代理模式(Proxy) - 适配器模式(Adapter) - 装饰器模式(Decorator) - 桥接模式(Bridge) - 组合模式(Composite) - 外观模式(Facade) ...
Java面向对象(高级)-- 单例(Singleton)设计模式
Java高手真经 - Java Web系统设计与架构 源代码(一)设计模式 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1...