我们可以发现,在上面代码中,使用了static 修饰了成员变量instance,在类初始化阶段中static 修饰了成员变量instance,在多线程的情况下能保证只实例化一次。
这种方式实现的单例模式,在类初始化阶段就已经在堆内存中分配了一块,用于存放实例化对象,所以也称为饿汉模式。
然而饿汉模式在类成员变量比较多,或变量比较大的情况下,可能会在没有使用类对象的情况下,一直占用堆内存。试想下,如果一个开源框架中的所有类都是基于饿汉模式实现的单例,这将会初始化所有单例类。将会占据堆中很大一部分空间,对系统性能来说无疑是灾难性的。
懒汉模式
//懒汉模式
public final class Singleton {
private static Singleton instance= null;//不实例化
private Singleton(){
}//构造函数
public static Singleton getInstance(){
//通过该函数向整个系统提供实例
if