`

Java中的单例模式

阅读更多

说明:如果要保证系统里一个类最多只能存在一个实例时,我们就需要单例模式。
这种情况在我们应用中经常碰到,例如缓存池、数据库连接池、线程池、一些应用服务实例等。
在高并发环境中,可能会创建多个对象实例,这时候只要加入synchronized关键字,就能保证线程安全了

package com.yt.manager.javamodel.singleton;

import org.apache.log4j.Logger;

/**
 * Java单例模式 
 * 说明:如果要保证系统里一个类最多只能存在一个实例时,我们就需要单例模式。
 * 这种情况在我们应用中经常碰到,例如缓存池、数据库连接池、线程池、一些应用服务实例等。
 * 在高并发环境中,可能会创建多个对象实例,这时候只要加入synchronized关键字,就能保证线程安全了
 * @author zxf
 * 
 */
public class SingletonIndex {

	Logger log = Logger.getLogger(SingletonIndex.class);

	// 1、为了限制该类的对象被随意创建,我们要保证该类的构造方法是私有的,这样外部类就无法创建该类的对象了
	private SingletonIndex() {
		log.info("初始化了............");
	}

	private static SingletonIndex singletionTest;
    //2、为了给外部对象提供此单例对象的访问,我们为它提供了一个全局访问点
	public static synchronized SingletonIndex getInstance() {
		if (singletionTest == null) {
			singletionTest = new SingletonIndex();
		}
		return singletionTest;
	}

	int value = 0;

	public int getValue() {
		return value;
	}

	public void setValue(int value) {
		this.value = value;
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		SingletonIndex test1 = singletionTest.getInstance();
		test1.setValue(10);
		SingletonIndex test2 = singletionTest.getInstance();
		System.out.println(test1 == test2);
		System.out.println("value:" + test2.getValue());
	}
}

 在SingletonTest类中虽然实现了多线程的安全访问,但是在多线程高并发的情况下,
 给getInstance()方法加上synchronized会使性能大不如前。我们仔细分析一下并不难发现,
 使用了synchronized关键子对整个getInstance()方法同步是没有必要的。我们只要保证实例化
 这个单例对象的那段逻辑被一个线程执行就可以了,而返回引用的那段代码是没有必要进行同步的。

package com.yt.manager.javamodel.singleton;

import org.apache.log4j.Logger;

/**
 * @author zxf
 */
public class DoubleCheckSingletion {

	Logger log = Logger.getLogger(DoubleCheckSingletion.class);

	private DoubleCheckSingletion() {
		log.info("初始化了............");
	}

	private static DoubleCheckSingletion singletionTest;

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

	int value = 0;

	public int getValue() {
		return value;
	}

	public void setValue(int value) {
		this.value = value;
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		DoubleCheckSingletion test1 = singletionTest.getInstance();
		test1.setValue(10);
		DoubleCheckSingletion test2 = singletionTest.getInstance();
		System.out.println(test1 == test2);
		System.out.println("value:" + test2.getValue());
	}
}
 
分享到:
评论

相关推荐

    Java SE程序 单例模式

    Java SE程序 单例模式Java SE程序 单例模式Java SE程序 单例模式Java SE程序 单例模式Java SE程序 单例模式Java SE程序 单例模式Java SE程序 单例模式Java SE程序 单例模式Java SE程序 单例模式Java SE程序 单例模式...

    java单例模式实例

    单例模式是软件设计模式中的一种经典模式,用于确保一个类只有一个实例,并提供一个全局访问点。在Java中,有多种实现单例模式的方法,每种都有其特点和适用场景。接下来,我们将深入探讨这些实现方式。 首先,我们...

    实用Java的单例模式,实用于Java学习者

    实用Java的单例模式,实用于Java学习者 单例模式 单例模式

    Java实现多种单例模式

    在Java编程中,单例模式是一种常用的软件设计模式,它保证一个类只有一个实例,并提供一个全局访问点。这种模式在需要频繁创建和销毁对象的场景中尤其有用,因为它可以节省系统资源并确保对象间的协调一致。以下是...

    Java实现单例模式[汇编].pdf

    单例模式是软件设计模式中的一种经典模式,其主要目的是确保一个类只有一个实例,并提供一个全局访问点。这种模式在Java中广泛应用于控制资源的共享,例如数据库连接池、线程池或者配置对象等。在Java中,通常有三种...

    Java 单例模式 工具类

    Java中的单例模式是一种常用的软件设计模式,它保证一个类只有一个实例,并提供全局访问点。在Java编程中,单例模式常用于控制资源的访问,比如数据库连接池、线程池或者日志对象等。本篇文章将深入探讨如何在Java中...

    Java 单例模式.pptx

    单例模式是一种常用的软件设计模式,在这种模式中,一个类只能拥有一个实例,并且该类必须自行创建并提供这个实例。通常,单例模式用于确保某个类在整个应用程序生命周期中只存在一个实例,这有助于节省资源并简化对...

    java-单例模式几种写法

    单例模式是软件设计模式中的一种,用于控制类的实例化过程,确保一个类只有一个实例,并提供全局访问点。在Java中,实现单例模式有多种方法,每种方法都有其特点和适用场景。以下是对这六种常见单例模式实现方式的...

    Java中懒汉单例设计模式线程安全测试

    Java中懒汉单例设计模式线程安全测试,单例设计模式的测试

    java中的单例模式

    Java中的单例模式是一种设计模式,它用于保证一个类只有一个实例,并提供一个全局访问点。这种模式在系统中需要控制实例数量,特别是当这个实例需要频繁地被多个对象共享时非常有用,例如数据库连接池、线程池或者...

    java:单例模式 作为对象的创建模式

    单例模式是设计模式中的一种,它在Java编程中被广泛应用,主要目的是限制类的实例化,确保在程序运行期间,对于某个特定类,只存在一个全局共享的对象。这种模式通常用于那些需要频繁实例化然后销毁,或者创建代价...

    Java 单例模式 懒汉模式

    Java 单例模式 懒汉模式 //懒汉式 多线程中不可以保证是一个对象

    设计模式单例模式和工厂模式综合应用

    **代码**文件则提供了实际的Java实现,通过查看这些代码,我们可以看到单例模式和工厂模式如何在实践中被运用,包括类的定义、方法的实现以及如何通过代码调用来创建和管理对象。 总的来说,这个项目为学习和理解...

    java 设计模式 mvc模式 单例模式 代理 工厂 简单工厂

    例如,MVC模式在Web应用开发中非常常见,单例模式常用于日志服务、数据库连接池等需要全局唯一的场景,代理模式可以用于数据访问控制,工厂模式则用于解耦对象的创建和使用。通过学习和实践这些模式,开发者可以更好...

    java 获取 配置文件 属性 单例模式 高效加载

    通过单例模式实例化获取propertyUtil 工具包实例,高效加载配置文件,java语言编写。通过单例模式实例化获取propertyUtil 工具包实例,高效加载配置文件,java语言编写。通过单例模式实例化获取propertyUtil 工具包...

    Java单例模式应用研究.pdf

    ### Java单例模式应用研究 #### 一、单例模式概述 单例模式(Singleton Pattern)作为一种最基本的创建型设计模式,其主要目的是控制一个类的实例化过程,确保在整个应用程序中仅存在一个实例,并且该实例能够被全局...

    Java单例模式深入理解

    Java单例模式是一种设计模式,它允许在程序中创建唯一一个类实例,通常用于管理共享资源,例如数据库连接、线程池或者配置对象等。单例模式的核心在于限制类的构造函数,确保类只能被初始化一次,从而实现全局唯一的...

    java设计模式之单例模式.zip

    在这些模式中,单例模式是最为广泛使用的一种。单例模式确保一个类只有一个实例,并提供一个全局访问点,使得在整个应用程序中,无论何处都可以方便地调用这个唯一的实例。 单例模式的主要优点在于它可以控制实例化...

    java单例模式在android中的应用

    Java的单例模式是一种常用的软件设计模式,它保证一个类只有一个实例,并提供全局访问点。在Android开发中,单例模式的应用尤其广泛,因为它能够有效管理资源,减少内存开销,提高性能。以下是对单例模式在Android中...

Global site tag (gtag.js) - Google Analytics