单例模式中饿汉式和懒汉式的区别

本文探讨了两种常见的单例模式实现方式——饿汉式和懒汉式。饿汉式在类加载时就完成了实例化,确保线程安全但可能浪费内存;懒汉式则在第一次需要时才实例化,节省内存但需要线程同步,可能影响性能。在多线程环境中,懒汉式需配合同步机制以保证线程安全。总结来说,饿汉式适用于对性能要求较高且实例化成本不大的场景,而懒汉式则在内存利用率上更有优势。
摘要由CSDN通过智能技术生成
区别饿汉式懒汉式
实例化一开始就实例化等到要用的时候才实例化
线程安全安全不安全,需要加锁
性能效率高效率低
占用内存有可能会浪费不会浪费

懒汉式:多线程的情况可以用。(懒汉式,不好)

注解:如 当两个线程同时想创建实例,由于在一个时刻只有一个线程能得到同步锁,当第一个线程加上锁以后,第二个线程只能等待。第一个线程发现实例没有创建,创建之。第一个线程释放同步锁,第二个线程才可以加上同步锁,执行下面的代码。由于第一个线程已经创建了实例,所以第二个线程不需要创建实例。保证在多线程的环境下也只有一个实例。

缺点:每次通过getInstance方法得到singleton实例的时候都有一个试图去获取同步锁的过程。而众所周知,加锁是很耗时的。能避免则避免。

饿汉式(建议使用):
注解:初试化静态的instance创建一次。如果我们在Singleton类里面写一个静态的方法不需要创建实例,它仍然会早早的创建一次实例。而降低内存的使用率。

缺点:没有lazy loading的效果,从而降低内存的使用率

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值