单例模式的实现方式有哪两种?

单例模式是一种创建型设计模式,它确保一个类只有一个实例,并提供全局访问点来获取该实例。在 Java 中,实现单例模式有两种常见的方式:

1.懒汉式单例

懒汉式单例在首次请求时才创建实例,如果实例已经存在,则返回现有实例。

这种方式的优点是节省了资源,因为只有在需要时才会创建对象。但是,需要注意多线程并发访问的情况,需要进行额外的同步控制以确保只创建一个实例

public class LazySingleton {
    private static LazySingleton instance;

    private LazySingleton() {
        // 私有构造方法
    }
//getInstance() 方法使用了 synchronized 关键字来确保线程安全,但这会带来性能开销
    public static synchronized LazySingleton getInstance() {
        if (instance == null) {
            instance = new LazySingleton();
        }
        return instance;
    }
}

2.饿汉式单例

饿汉式单例在类加载时就创建实例,因此不存在多线程并发访问的问题。这种方式的缺点是如果该实例很大或者在应用程序启动时就不需要,会浪费资源

//不需要额外的同步控制,因为实例在类加载时就已经创建,不存在竞争条件
public class EagerSingleton {
    private static final EagerSingleton instance = new EagerSingleton();

    private EagerSingleton() {
        // 私有构造方法
    }

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

总结:

如果希望延迟实例化并考虑多线程安全性,用懒汉式单例,

如果希望简单明了且不担心资源浪费,用饿汉式单例

另外,还可以考虑使用双重检查锁定等方式来改进懒汉式单例的性能

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值