懒汉式和饿汉式的比较

一、懒汉式(Lazy Initialization)

懒汉式是指在需要调用时才去创建单例对象,而不是在程序运行时就创建好,以达到延迟加载的效果。

1、优点

懒汉式可以避免在程序启动时就创建单例对象,从而降低系统的开销。如果单例对象很大或者需要一定时间才能创建,那么懒汉式会比较有优势。

2、缺点

懒汉式也有一些缺点。首先,多线程环境下,需要使用同步锁来保证线程安全,这会导致性能下降。其次,如果有多个类加载器,那么会存在不同类加载器加载了不同的单例对象的情况。

3、代码实现

public class LazySingleton {

	private static LazySingleton instance;

	private LazySingleton() {}

	public static synchronized LazySingleton getInstance() {
		if (instance == null) {
			instance = new LazySingleton();
		}
		return instance;
	}
}

二、饿汉式(Eager Initialization)

饿汉式是指在程序运行时就创建好单例对象,并且在整个程序周期内都会存在。

1、优点

饿汉式可以避免多线程环境下的同步问题,因为单例对象在程序运行时就已经创建好了。同时在单例对象很小且不需要延迟加载的情况下,使用饿汉式也比较合适。

2、缺点

饿汉式也有一些缺点。首先,如果单例对象比较大,那么在程序启动时就会占用较多的内存空间。其次,如果单例对象的初始化需要很长的时间,那么程序启动时的等待时间会变长。

3、代码实现

public class EagerSingleton {

	private static final EagerSingleton instance = new EagerSingleton();

	private EagerSingleton() {}

	public static EagerSingleton getInstance() {
		return instance;
	}
}

三、懒汉式与饿汉式的比较

1、线程安全

懒汉式需要使用同步锁来保证线程安全,而饿汉式本身就是线程安全的。

2、是否延迟加载

懒汉式是延迟加载的,而饿汉式是立即加载的。

3、系统开销

懒汉式可以避免在程序启动时就创建单例对象,从而降低系统的开销。而饿汉式会在程序启动时就创建单例对象,如果单例对象很大或需要一定时间才能创建,那么会造成一定的系统开销。

4、不同类加载器加载的问题

如果有多个类加载器,那么懒汉式会存在不同类加载器加载了不同的单例对象的情况。而饿汉式不存在这个问题。

原创文章,作者:CPNGR,如若转载,请注明出处:https://www.506064.com/n/367936.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
CPNGRCPNGR
上一篇 2025-04-02 01:28
下一篇 2025-04-02 01:28

相关推荐

  • 懒汉式单例模式:从多个方面深入阐述

    在面向对象编程中,单例指的是一个类只允许创建一个实例,并且提供一个全局访问的接口。单例模式主要解决的问题是在多线程环境下,如何保证一个类只有一个实例,并且能够在全局范围内访问该实例…

    编程 2025-04-24

发表回复

登录后才能评论