想必很多朋友在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 也是要等到你代码中调用Hungry的getSingleton方法时才会去初始化,而不是你的项目启动起来之后就已经把静态变量singleton初始化了!
所以为什么java中的单例模式需要懒加载?还是上面的理由,当你显示去调用Hungry的静态方法或者静态变量/常量(构造方法为private,无法new)时这个类才会进行初始化,理想情况下,你的单例类Hungry 只对外提供getSingleton方法,那么你就无需考虑懒加载的问题,但是如果你的单例类可能还提供了其它外部可以调用的静态方法或者静态变量/常量时,你还是把单例的懒加载交给你自己处理比较好!
所以综合来看,在java中单例模式的懒加载还是你自己实现比较好,做好自己就行,就是后面代码变了,你的懒加载还是懒加载!
如有不足之处,可以在评论区留言,期待各位的斧正,谢谢!!!