`
西北小强
  • 浏览: 344666 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java实现单例

    博客分类:
  • Java
阅读更多

最近工作不是很忙,于是回过头再看看java基础,当时学习单例的时候不太明白为什么要那么写,只是死记硬背老师写的单例的格式,刚把单例常见的两种方式写了一下,顺便做个笔记。在开发过程中推荐使用第二中方法,因为懒汉模式要考虑到线程的同步问题,执行效率要比第二中方法低,当然如果你钟情于第一种也是可以的。

1、懒汉模式:在这种模式下,SingletonTest1进入内存的时候,内存中还没有SingletonTest1的对象,只有在程序调用getInstance方法时程序才创建对象。

package com.temp;

public class SingletonTest1 {
	/**
	 * 单例之懒汉模式
	 */
	private static SingletonTest1 singleon =null;
	private SingletonTest1(){
	}
	public static synchronized SingletonTest1 getInstance(){
		/*
		 * 此处如果没有synchronized时,可能会引起一下情况,
		 * 如果A线程正在执行此处singleon==null时,
		 * B线程刚好执行到 	singleon = new SingletonTest1();
		 * B线程已经创建了singleton对象,而此时A线程判断 singleton==null 刚好是ture A线程就会再创建一个
		 * singleton对象,这样的话有可能引发程序异常,而我们从代码中却找不到任何问题
		 */
		if(singleon==null){					
			singleon = new SingletonTest1();
		}
		return singleon;
	}
	
	public static void main(String[] args) {
		SingletonTest1 s1=SingletonTest1.getInstance();
		SingletonTest1 s2=SingletonTest1.getInstance();
		SingletonTest1 s3=SingletonTest1.getInstance();
		if(s1==s2&& s2==s3){
			System.out.println("创建的对象相同");
			s1.fun();
		}else{
			System.out.println("创建的对象不同");
		}
	}
	
	public void fun(){
		System.out.println("hello word");
	}
}

 2、饿汉模式:所谓的饿汉模式即不管三七二十一先创建singleton对象。

public class SingletonTest {
	/**
	 * 单例之饿汉模式
	 */
	private static SingletonTest singleon = new SingletonTest();
	private SingletonTest(){
	}
	public static SingletonTest getInstance(){
		return singleon;
	}
	
	public static void main(String[] args) {
		SingletonTest s1=SingletonTest.getInstance();
		SingletonTest s2=SingletonTest.getInstance();
		SingletonTest s3=SingletonTest.getInstance();
		if(s1==s2 && s2==s3){
			System.out.println("创建的对象相同");
			s1.fun();
		}else{
			System.out.println("创建的对象不同");
		}
	}
	public void fun(){
		System.out.println("hello word");
	}
}

 

 

分享到:
评论

相关推荐

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

    在Java中,通常有三种常见的单例实现方式:懒汉式单例、饿汉式单例和登记式单例。 1. **懒汉式单例**: 懒汉式单例的特点是在类加载时不创建实例,而是等到第一次调用`getInstance()`方法时才创建。这样可以延迟...

    Java实现多种单例模式

    以下是Java实现的六种单例模式的详细解释: 1. 懒汉式(Lazy Initialization): 这种方式延迟了单例对象的初始化,直到第一次被请求时。例如,`SingleInstance1.java`可能就实现了这种方式。代码通常包含一个私有...

    Java实现单例设计模式方法解析

    Java实现单例设计模式方法解析 单例设计模式是软件设计模式中的一种,旨在确保一个类只有一个实例,并提供一个全局访问点。Java中有多种方式可以实现单例设计模式,本文将对这些方法进行解析,并提供示例代码。 一...

    java实现单例模式-双重校验锁模式(线程安全)

    双重校验锁模式结合了懒汉模式和饿汉模式的优点,既实现了延迟加载,又保证了线程安全。你可以根据需求选择合适的单例模式实现方式。

    java实现单例模式-懒汉模式(线程不安全

    懒汉模式是延迟加载的方式,在首次调用getInstance()方法时才会创建实例;

    java实现单例模式-饿汉模式(线程安全)

    饿汉模式在类加载时就创建了实例

    java实现单例模式-静态内部类模式(线程安全)

    静态内部类模式结合了懒汉模式和饿汉模式的优点,既实现了延迟加载,又保证了线程安全。

    java实现单例模式-懒汉模式(线程安全,使用synchronized关键字)

    线程安全,使用synchronized关键字

    java单例模式实例

    在Java中,有多种实现单例模式的方法,每种都有其特点和适用场景。接下来,我们将深入探讨这些实现方式。 首先,我们来看**懒汉式(Lazy Initialization)**。这种实现方式是在类被首次请求时才创建单例对象,延迟...

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

    在Java中,常见的单例实现方式有两种:饿汉式(Eager Initialization)和懒汉式(Lazy Initialization)。 **饿汉式**:在类加载时就完成了初始化,所以没有线程安全问题,但是不管是否使用,都会立即创建单例对象...

    java-单例模式几种写法

    在Java中,实现单例模式有多种方法,每种方法都有其特点和适用场景。以下是对这六种常见单例模式实现方式的详细解释: 1. **饿汉式(静态常量)** 这是最简单的单例实现,它在类加载时就创建了实例,线程安全。 `...

    单例模式Java实现

    在Java中,我们可以使用多种方式来实现单例模式: 1. **饿汉式(静态常量)**:这是最简单的单例实现方式,它在类加载时就完成了初始化,所以类加载比较慢,但获取对象的速度快,且线程安全。 ```java public class...

    Java实现单例的难点

    有简单又高效的方法可以实现单例模式,但没有一种方式能在任何情况下都确保单例的完整性。  单例模式是指某个类只被实例化一次,用来表示全局或系统范围的组件。单例模式常用于日志记录、工厂、窗口管理器和平台...

    Java的单例设计模式

    实现单例模式,Java中有几种常见的方法: 1. 饿汉式(静态常量):这是最简单的实现方式,它在类加载时就完成了初始化,因此是线程安全的。代码如下: ```java public class Singleton { private static final ...

    Java单例类

    Java单例类详解 Java单例类是一种常见的设计模式,具有三个特点:单例类只能有一个实例、单例类必须自己创建自己的唯一实例、单例类必须给所有其他对象提供这一实例。单例模式可以分为三种:懒汉子式单例、饿汉子式...

    JAVA单例模式的几种实现方法

    Java中实现单例模式的方法有很多种,每种方法都有其适用场景和优缺点。选择合适的实现方式需要根据实际需求和应用场景综合考虑。例如,如果程序启动时就需要单例对象,那么可以使用饿汉式;如果希望在真正需要时才...

    Java 单例模式 工具类

    本篇文章将深入探讨如何在Java中实现单例模式,以及如何创建一个工具类来封装单例的创建。 首先,让我们了解单例模式的几种常见实现方式: 1. 饿汉式(静态常量): 这是最简单的单例实现,它在类加载时就完成了...

Global site tag (gtag.js) - Google Analytics