`
阅读更多
饿汉式:
//饿汉式是线程安全的,在类创建的同时就已经创建好一个静态的对象供系统使用,以后不在改变,
//这种单利模式比较简单,也比较可靠,唯一不足就是无法对singleton实例做延迟加载。
public class Singleton{
	private static Singleton singleton = new Singleton ();
	private Singleton (){
            System.out.println("这里创建单例过程可能会比较慢");
        }
	public static Singleton getInstance(){
            return singletion;
        }
        public static void createStringTask(){
            System.out.println("这是模拟单例其他任务操作");
        }
} 
//*输出结果为:这里创建单例过程可能会比较慢
               这是模拟单例其他任务操作
//*从输出结果我们可以看到,虽然并没有使用单例类,但它还是被创建出来了,这也许是开发人员所不
   愿意看到的。为了解决这个问题,并以此提高系统在相关函数调用时反应的速度,就需要下面的延迟
   加载方式来解决以上问题。
       
懒汉式:
//懒汉式如果在创建实例对象时不加上synchronized则会导致对对象的访问不是线程安全的。
//他是在需要的时候才创建对象,而饿汉式在虚拟机启动的时候就会创建。
public class LazySingleton{
	private static LazySingleton lazySingleton = null;
        pirvate LazySingleton(){
            System.out.printl("这里创建单例很慢");
        }
	public static synchronized getInstance(){
		 if(lazySingleton==null){
			 lazySingleton = new LazySingleton();
		 }
		return lazySingleton;
	}
} 
//*首先对静态成员变量lazySingleton初始值赋予null,确保系统启动时没有额外的负载;其次
   在getInstance时先判断lazySIngletons是否存在,若存在返回,步存在就在建立实例,需要注意的
   是getInstance方法必须是synchronized的,否则在多线程的环境下, 但线程1正在运行时,完成赋值
   操作前,线程2可能判断lazySingleton没有创建,线程2也将启动新建单例的程序,这样就导致多个
   实例被创建,所以synchronized是必须的!使用上面的例子虽然实现了单例的延时加载,使用了同步
   关键字,这在多线程环境下性能大大减弱,所以我们在优化下代码如下:

public class LazySingleton{
	pirvate LazySingleton(){
		System.out.printl("这里创建单例很慢");
	}
	private static class SingletonUtil{
		private static LazySingleton instace = new LazySingleton();
	}
	public static LazySingleton getInstace(){
		return SingletonUtil.instace;
	}
} 
//*在这种方式中,单例模式使用的内部静态类来维护自己的实例,当加载当前类的时候,其内部类,不
   会被初始化,由于由于实例的建立是在类加载完成的,所以对多线程也是安全的,这里我们没有用
   synchronized关键字,因此这种方式兼备以上两种方式的优点!

 

1
1
分享到:
评论

相关推荐

    java 单例模式(懒汉式与饿汉式)

    Java 单例模式(懒汉式与饿汉式) Java 单例模式是一种常用的软件设计模式,在它的可信结构中只包含一个被实例化单例的特殊类。通过单例设计模式可以把整系统中的一个类只有一个实例。单例设计模式又分为两种方式,...

    java 单例模式(懒汉式与饿汉式).docx

    java 单例模式(懒汉式与饿汉式) java 单例模式是一种常用的软件设计模式。在它的可信结构中只包含一个被实例化单例的特别类。通过单例设计模式可以把整系统中的一个类只有一个实例。单例设计模式又分为两种方式,...

    java单例模式实例

    接下来是**双重检查锁定(Double-Check Locking)**,它结合了懒汉式和饿汉式的优点,既延迟初始化,又保证了线程安全。代码如下: ```java public class Singleton { private volatile static Singleton instance...

    java + 单例模式 + 懒汉式 + 资源

    在Java中,单例模式有多种实现方式,其中最常用的两种是饿汉式(Eager Initialization)和懒汉式(Lazy Initialization)。本文将深入探讨懒汉式单例模式,以及它与饿汉式的区别。 ### 懒汉式单例模式 懒汉式的...

    使用单例模式创建学生管理系统(饿汉式、懒汉式)

    在这个场景中,我们将探讨如何使用单例模式来创建一个学生管理系统,主要涉及“饿汉式”和“懒汉式”两种实现方式。 **饿汉式单例** 饿汉式单例在类加载时就完成了实例化,因此它是线程安全的。这种方式保证了单例...

    java 单例模式(饿汉模式与懒汉模式)

    java 单例模式 饿汉式单例 对于饿汉模式,我们可这样理解:该单例类非常饿,迫切需要吃东西,所以它在类加载的时候就立即创建对象。 懒汉式单例类 对于懒汉模式,我们可以这样理解:该单例类非常懒,只有在自身...

    java单例设计模式-饿汉式-懒汉式 (2).docx

    这种模式在Java中有两种常见的实现方式:饿汉式和懒汉式。 1. 饿汉式单例: 饿汉式单例在类加载时就完成了初始化,因此类加载时就创建了单例对象。这种方式称为预先加载方式,它保证了线程安全,因为对象的创建在类...

    java单例模式及实现

    单例模式可以分为三种:懒汉式单例、饿汉式单例、登记式单例。 单例模式的要点 1. 某个类只能有一个实例 2. 它必须自行创建这个实例 3. 必须自行向这个系统提供这个实例 饿汉式单例类 饿汉式单例类是在类加载的...

    Java 单例模式.pptx

    单例模式的实现方式主要有三种:饿汉式、懒汉式以及静态内部类方式。 - **饿汉式** - **实现**: ```java public class Single1 { // 创建一个静态的实例 private static Single1 instance = new Single1(); ...

    设计模式——单例模式

    实现单例模式主要有两种方式:饿汉式和懒汉式。 ### **饿汉式单例模式** 饿汉式单例模式在类加载时就完成了实例化,因此也称为静态初始化。这种方式保证了线程安全,但可能会造成不必要的资源浪费,因为即使未使用...

    单例模式(懒汉式,饿汉式)

    单例模式有两种常见的实现方式:懒汉式和饿汉式。 ### 懒汉式单例 懒汉式单例,顾名思义,是一种延迟初始化的单例模式,即在第一次调用时才创建实例。这种方式的优点是在需要的时候才创建对象,节省了内存资源;...

    java单例设计模式-饿汉式-懒汉式[归纳].pdf

    总结,Java单例设计模式通过饿汉式和懒汉式实现,饿汉式在类加载时创建实例,适用于不需要延迟加载的情况;懒汉式在首次调用时创建,但在多线程环境下需要额外的同步措施以保证线程安全。在实际应用中,应根据具体...

    Java 单例模式 工具类

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

    java单例设计模式-饿汉式-懒汉式.pdf

    Java 单例设计模式主要分为两种实现方式:饿汉式和懒汉式。这两种方式都是为了确保一个类只有一个实例,并且提供全局访问点。 **饿汉式**: 饿汉式单例在类加载时就完成了实例化,因此是静态常量的方式,确保了线程...

    java单例设计模式-饿汉式-懒汉式[参照].pdf

    在Java中,单例模式有两种常见的实现方式:饿汉式和懒汉式。 1. **饿汉式**: 饿汉式单例在类加载时即创建了实例,因此它是线程安全的。这种方式保证了类加载后就立即初始化单例对象,避免了多线程环境下的同步...

    java单例设计模式-饿汉式-懒汉式.docx

    在Java中,单例模式通常有两种实现方式:饿汉式和懒汉式。 1. 饿汉式: 饿汉式是在类加载时就完成了初始化,因此它是线程安全的。代码如下: ```java public class Singleton { private static final Singleton ...

    java单例设计模式-饿汉式-懒汉式 (2).pdf

    饿汉式单例设计模式 饿汉式在类加载时即创建单例对象,因此在类加载阶段就已经完成了初始化。由于类加载是线程安全的,所以饿汉式天生就是线程安全的。它的实现代码如下: ```java public class Singleton { ...

Global site tag (gtag.js) - Google Analytics