`
wuhongyu
  • 浏览: 406909 次
  • 性别: Icon_minigender_1
  • 来自: 哈尔滨
社区版块
存档分类
最新评论

JAVA设计模式学习笔记5——单例模式

阅读更多

单例模式——确保一个类只有一个实例,并提供一个全局访问点。

 

    单例模式一般分为懒汉式和恶汉式,懒汉式是说当第一次获取类时才进行类的实例化,饿汉式是说当类被加载时直接实例化。定义单例模式的一般步骤是:

 * 定义一个私有的构造函数,以保证这个类不能被外部程序实例化;
 * 定义一个类的实例变量,以保存这个类的唯一实例;
 * 定义一个获取类唯一实例的静态方法,使外部程序可以获取这个类的唯一实例。

 

懒汉式:

 

public class Singleton {
	private static Singleton uniqueInstance;
 
	private Singleton() {}
 
	public static synchronized Singleton getInstance() {
		if (uniqueInstance == null) {
			uniqueInstance = new Singleton();
		}
		return uniqueInstance;
	}
}

    使用synchronized关键字保证获取实例时,如果实例为null,只有一个线程去创建该实例,但这样做会导致效率低下,下面有更好的解决办法

 

线程安全的懒汉式:

 

 

public class Singleton {
	private volatile static Singleton uniqueInstance;

	private Singleton() {}

	public static Singleton getInstance() {
		if (uniqueInstance == null) {
			synchronized (Singleton.class) {
				if (uniqueInstance == null) {
					uniqueInstance = new Singleton();
				}
			}
		}
		return uniqueInstance;
	}
}

    用“双重检查加锁”,在getInstance中减少使用同步。volatile关键字确保,当uniqueInstance变量被初始化成 Singleton实例时,多个线程正确的处理uniqueInstance变量。注意,1.4及更早的Java中,许多JVM对于volatile关键 字的实现会导致双重加锁失效。

 

 

饿汉式:

public class Singleton {
	private static Singleton uniqueInstance = new Singleton();
 
	private Singleton() {}
 
	public static Singleton getInstance() {
		return uniqueInstance;
	}
}

    饿汉式在类被加载时直接实例化,因此不存在获取实例时的线程安全问题。

 

分享到:
评论
1 楼 di1984HIT 2015-02-06  
用饿汉是不错的。

相关推荐

    Java学习笔记——良葛格

    【Java学习笔记——良葛格】是一份由爱好者良葛格整理的Java学习资料,主要以PDF格式呈现,虽然可能不完整,但包含了丰富的Java编程基础知识和实践技巧,旨在为初学者提供一个学习和参考的平台。以下是笔记中可能...

    java设计模式(收集整理,学习笔记)

    Java设计模式是软件开发中的一种重要思想,它是一种在特定情境下解决常见问题的模板,可以提高代码的可重用性、可维护性和灵活性。在Java中,设计模式主要分为三大类:创建型、结构型和行为型。下面将详细讨论在给定...

    Java入门学习笔记

    "Java入门第三季学习笔记"可能涵盖了更多高级话题,如反射、注解、设计模式和Java库的使用。反射允许程序在运行时检查类、接口、字段和方法的信息,提供了更大的灵活性。注解是一种元数据,可以用来提供编译器或运行...

    学习笔记——资料

    【Java学习笔记——全面解析】 Java作为一种广泛应用的高级编程语言,是软件开发领域的核心力量。这份"学习笔记——资料"涵盖了Java学习的各个方面,旨在帮助初学者和有经验的开发者巩固基础,提升技能。以下是对这...

    个人学习的java笔记——思维导图

    12. **设计模式**:设计模式是解决常见软件设计问题的经验总结,如单例模式、工厂模式、观察者模式等,熟练掌握设计模式可以提高代码质量和可维护性。 13. **框架应用**:Spring、MyBatis、Hibernate等框架极大地...

    从Java菜鸟到专家的资料

    8. **JAVA设计模式.chm**:设计模式是软件工程中的重要概念,这本书详细介绍了23种经典设计模式,如单例模式、工厂模式、观察者模式等,对提升代码质量和可维护性有极大帮助。 9. **Oracle optimizer.chm**:可能...

    良葛格Java JDK 5.0学习笔记

    枚举在设计模式中的单例模式、策略模式等有广泛应用。 增强的for循环(也称为foreach循环)是Java 5.0的另一大亮点。它简化了遍历数组和集合的操作,使得代码更加简洁易读,如:`for (Type item : collection) { .....

    达内JAVA培训综合笔记

    还包括了对单例模式和模版方法模式的讨论,这两种设计模式在实际开发中非常实用。二维数组和对象数组、单例模式和模版方法模式也在这一部分进行了详细讲解。 五、JavaSE核心II 继续深入Java标准版核心内容,该部分...

    李兴华java word版全部笔记

    15. **设计模式**:涵盖了常见的设计模式,如单例、工厂、观察者、装饰者等,以及如何在实际编程中应用这些模式。 这份文档集是学习Java编程的宝贵资源,它不仅包含理论知识,还提供了丰富的示例代码,帮助学习者...

    java笔记与java核心内容解读

    12. **设计模式**:设计模式是解决软件设计中常见问题的模板,如单例模式、工厂模式、观察者模式等,它们是成为优秀Java开发者的重要组成部分。 这份"java笔记与java核心内容解读"将详细阐述以上知识点,通过实例和...

    学习笔记

    在阅读源码时,我们需要注意代码的组织结构、模块化设计以及异常处理,同时还要理解各种设计模式的运用,如单例模式、工厂模式等。此外,调试技巧也是源码分析的关键,学会使用断点、日志打印、性能分析工具等将极大...

    软件设计师软考笔记.zip

    这份压缩包包含了博主在学习过程中记录的详细笔记,以及一份精心整理的设计模式表格,旨在帮助备考者系统、高效地掌握相关知识。 首先,我们来探讨一下“软考”——这是一项国家级的专业技术资格认证考试,旨在评测...

    java学习笔记

    ### Java学习笔记——设计模式与基础概念解析 #### 一、设计模式概述 设计模式是在软件开发过程中,针对常见的问题提出的经过验证的解决方案。这些模式是开发者们在长期实践中不断提炼和完善的结果,能够帮助...

    达内java培训笔记

    在深入Java编程时,你会接触到更多的面向对象概念,比如接口(Interface)、抽象类(Abstract Class)、访问修饰符(Public、Private、Protected、Default)、构造器(Constructor)、final关键字、static关键字、...

    跃达创新java笔记

    12. **设计模式**:理解并应用常见的设计模式(如单例、工厂、观察者、装饰器等),可以提高代码的可维护性和复用性。 13. **Java EE**:对于进阶学习,了解Java企业级应用开发,如Servlet、JSP、JPA、Spring框架等...

    Spring学习笔记,精华摘要

    首先,Spring中广泛运用了两种设计模式:工厂模式和单例模式。工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。在Spring框架中,工厂模式体现在Spring容器(BeanFactory或ApplicationContext)中,...

    遇见狂神说的全套java视频笔记

    12. **设计模式**:设计模式是解决常见软件设计问题的成熟解决方案,如单例模式、工厂模式、观察者模式等,它们在Java开发中被广泛应用。 “狂神说全部笔记内容”可能详细地解析了以上各个知识点,并通过实例和练习...

    SSM模式学习路线-----[Spring入门笔记](csdn)————程序.pdf

    【Spring入门笔记】主要介绍了Spring框架的基础知识,包括Spring的核心概念、Bean的配置与作用域、依赖注入、SpringAop和SpringJdbc,以及事务声明。...学习Spring有助于提高Java应用的开发效率和可维护性。

    最全的java达内笔记

    - **设计模式**:单例、工厂、观察者等常见设计模式及其在Java中的实现。 总之,"最全的java达内笔记"应是一个全面的学习资源,不仅覆盖EJB,还可能深入到Java的各个方面,旨在帮助学习者构建扎实的Java技能,从而...

    Java_Architect_Notes-John_H.rar_architect_java architect

    【Java架构师笔记——John_H】是一份针对Java架构师认证考试的重要学习资源,由知名专家John H提供。这份资料全面覆盖了Java架构设计的核心概念和技术,旨在帮助备考者深入理解并掌握成为一名合格的Java架构师所需的...

Global site tag (gtag.js) - Google Analytics