java中的单例模式为什么需要懒加载?

想必很多朋友在java中都使用过单例模式,在网上搜索的时候也都查到过各种单例模式的实现,比如我之前写的一篇博客:单例模式的7种实现方式及分析(https://blog.csdn.net/xyc_csdn/article/details/78165948),在这些博客中基本都会提到一个词,就是“懒加载”,但是也没有具体解释,让人感到头大。

但是当你细想的时候你就会发现有些不对劲,因为JVM加载一个类的时候本来就是懒加载的,哪怕你使用饿汉模式实现一个单例,代码如下:

package com.xiayc.singleton;

/**
 * 饿汉模式
 */
public class Hungry {
	private Hungry() {
	}
	
	private volatile static Hungry singleton = new Hungry();
	
	public static Hungry getSingleton() {
		return singleton;
	}
}


静态变量singleton 也是要等到你代码中调用HungrygetSingleton方法时才会去初始化,而不是你的项目启动起来之后就已经把静态变量singleton初始化了!

所以为什么java中的单例模式需要懒加载?还是上面的理由,当你显示去调用Hungry的静态方法或者静态变量/常量(构造方法为private,无法new)时这个类才会进行初始化,理想情况下,你的单例类Hungry 只对外提供getSingleton方法,那么你就无需考虑懒加载的问题,但是如果你的单例类可能还提供了其它外部可以调用的静态方法或者静态变量/常量时,你还是把单例的懒加载交给你自己处理比较好!

所以综合来看,在java中单例模式的懒加载还是你自己实现比较好,做好自己就行,就是后面代码变了,你的懒加载还是懒加载!

如有不足之处,可以在评论区留言,期待各位的斧正,谢谢!!!

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值