- 浏览: 144929 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (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 420项目需要jdk1.7,高了启动不了。会报错。 然而,我安装j ... -
map集合遍历
2017-09-05 16:10 522public 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 371java代码: package com.test.read ... -
利用jxl读取excel文件里面的内容
2017-06-28 14:23 468excel里面的内容: ... -
数组与集合互相转化
2017-04-21 20:20 370package com.ray.util; impo ... -
数组转化为集合
2017-04-16 21:07 849package com.ray.test; im ... -
快速排序
2017-03-31 14:32 375public class QuickSort { publ ... -
归并排序
2017-03-31 14:20 425public class mergeSort { ... -
希尔排序
2017-03-31 13:44 344public class shellSort { ... -
插入排序
2017-03-31 11:55 299插入排序的代码实现虽然没有冒泡排序和选择排序那么简单粗暴,但它 ... -
选择排序
2017-03-31 10:02 451选择排序是一种简单直观的排序算法,数据规模越小越好。唯一的好处 ... -
HTTP协议详解(真的很经典)
2017-03-27 14:14 382[b][b]HTTP是一个属于应用层的面向对象的协议,由于其简 ... -
多线程学习的几篇文章
2017-02-06 17:55 383Java多线程(一)、多线程的基本概念和使用 http:// ... -
java实现可变参数的方法
2017-02-06 17:16 365/** * * * @author Administr ... -
java实现日期的时间的加减
2017-02-06 17:11 1063/** * 时间的加减 * @author Adminis ... -
冒泡排序算法java
2016-12-07 15:22 433今天突然被人问到冒泡排序怎么解决,一时之间自己竟 ... -
FTP上传文件功能
2016-12-06 09:31 404ftp上传功能是很多的应用软件都必备的一个基础功能,特别是CM ... -
java基础之map集合遍历
2016-11-04 16:27 454由于map集合在平时用的时候都是直接get(key)取出单个值 ...
相关推荐
单例模式是软件设计模式中的一种经典模式,它在Java编程中被广泛使用。这个模式的主要目的是确保一个类只有一个实例,并提供一个全局访问点。这样做的好处在于可以控制实例的数量,减少资源消耗,同时便于协调整个...
单列模式(Singleton Pattern)是设计模式中的一种经典模式,主要用来确保一个类只有一个实例,并提供一个全局访问点。这种模式常被用于控制资源的共享,例如配置管理、线程池或者数据库连接池等场景。在Java编程...
单例模式是软件设计模式中的一种经典模式,它在许多实际场景中被广泛使用,尤其在需要控制类的实例只有一个的情况下。单例模式确保无论在程序的任何地方,只要通过特定方式请求创建该类的对象,始终只会返回同一个...
单例模式是软件设计模式中的一种,它的主要目的是确保一个类只有一个实例,并提供一个全局访问点。这种模式在很多场景下都非常有用,比如控制数据库连接、缓存管理、线程池等。下面我们将深入探讨单例模式的几种实现...
在Java或类似的面向对象编程语言中,单例模式常用于管理共享资源,如数据库连接池、线程池或者配置文件等。在这个场景中,我们将探讨如何使用单例模式来创建一个学生管理系统,主要涉及“饿汉式”和“懒汉式”两种...
单例模式的名称是“Singleton”,来源于英文单词“单一”。在Java语言中,实现单例模式主要有三种方式: 1. **饿汉式**(Eager Initialization):这是最简单的实现方式,类加载时就创建了单例实例。这样保证了线程...
单例模式是 Java 设计模式中的一种常见模式,旨在保证整个应用中只有一个类的实例存在。单例模式分为三种:懒汉式单例、饿汉式单例、登记式单例。下面对单例模式的特点、实现方式和应用场景进行详细介绍。 单例模式...
综上所述,单例模式通过限制类的实例化次数为一次,提供了对单一实例的全局访问,是软件开发中常见的设计模式之一。不同的实现方式各有优缺点,开发者应根据具体的应用场景和需求选择最合适的实现策略。
【Java面试基础题详解】 1. **final, finally, finalize的区别** - `final`:用于修饰类、方法和变量,表示不可变性。对于类,它禁止子类继承;对于方法,它防止方法被覆盖;对于变量,一旦赋值后不能再次赋值。 ...
根据提供的文件信息,我们可以推断出此文档主要讨论的是单例设计模式,但实际上提到了简单工厂模式。然而,由于【部分内容】中包含了一些无法识别的文字,我们无法直接从中提取具体的信息。因此,我们将基于【标题】...
Kotlin 中单例模式和 Java 的对比浅析 Kotlin 中单例模式是指在应用程序中确保某个类仅有一个实例,并提供一个全局访问点的机制。单例模式是一种常用的设计模式,在 Java 和 Kotlin 中都有多种实现方式。下面我们将...
Java是世界上最流行的编程语言之一,尤其在企业级应用开发中占据主导地位。以下是一些针对Java程序员面试中常见的问题及答案: 1. **final, finally, finalize的区别**: - `final` 关键字用于声明不可变的变量、...
- Singleton模式确保一个类只有一个实例,并提供全局访问点。实现方式包括饿汉式、懒汉式(线程安全)等。 以上是Java程序员面试中常见的问题和解答,理解这些知识点对于面试和实际开发都非常关键。
【JAVA程序员面试32问详解】 ...这些面试问题覆盖了Java的基础语法、面向对象、集合框架、并发编程等多个方面,是Java程序员面试中常见的考点。理解和掌握这些问题,将有助于提高面试表现和实际编程能力。
【JAVA程序员面试三十二问详解】 1. **final, finally, finalize的...这些面试问题涵盖了Java的基础语法、面向对象特性、集合框架、并发编程、异常处理等多个方面,深入理解这些问题可以帮助开发者提升Java编程技能。
【Java程序员面试32问详解】 1. **final, finally, finalize...以上是Java面试中常见的32个问题及其解答,涵盖了基础语法、面向对象、集合框架、并发编程等多个方面。了解这些问题,有助于提升Java程序员的面试表现。
32. **Singleton模式**:Singleton是一种设计模式,保证一个类只有一个实例,并提供全局访问点。 以上是Java面试中常见的知识点,深入理解和掌握这些概念对于成为一名合格的Java程序员至关重要。
32. **Singleton模式**:设计模式之一,确保一个类只有一个实例,并提供全局访问点。 理解这些Java面试中的陷阱和知识点,有助于你在面试中展现出扎实的Java基础和问题解决能力。在准备面试时,不仅要知道答案,...