懒汉和饿汉

发布时间 2023-04-06 11:03:47作者: 人在代码在

单例模式是一种设计模式,它保证一个类只有一个实例,并提供一个全局访问点。

懒汉模式和饿汉模式都是单例模式的实现方式,它们的区别在于实例化的时机不同。

饿汉模式是指在类加载时就已经创建了实例,并且在类内部提供一个静态的访问方法,通过这个方法返回单例对象。在使用时,不需要判断是否已经创建了实例,直接调用该方法即可。

懒汉模式是指在调用获取单例对象的方法时才会创建实例,而不是在类加载时就创建实例。这种方式可以节省系统资源,但是需要注意线程安全的问题,需要考虑并发访问时可能会创建多个实例的情况。

下面是两种模式的代码示例:

饿汉模式:

public class Singleton {
    private static final Singleton instance = new Singleton();
    private Singleton() {}
    public static Singleton getInstance() {
        return instance;
    }
}

懒汉模式:

public class Singleton {
    private static Singleton instance;
    private Singleton() {}
    public static synchronized Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}

可以看到,饿汉模式在类加载时就创建了实例,因此不存在线程安全的问题;而懒汉模式需要在方法内部判断是否已经创建了实例,需要使用synchronized关键字保证线程安全。