设计模式----单例模式

本文详细介绍了单例模式的五种实现方式:懒汉式、饿汉式、双重检测锁、静态内部类及枚举类。对比了每种方式的优缺点,如线程安全性、调用效率及是否支持延迟加载等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 单例模式 共 懒汉式 饿汉式 双重检测锁 静态(static)内部类 枚举类5种实现方式 

 现在说每个方式的优缺点  
首先看一个大家随手就能写的 单例模式(懒汉式式的写法)


 但这个是非线程安全的 

 为了实现线程安全 懒汉式的升级写法 



 但这其实还是保证不了线程安全的 

 我们再进一步升级 



 这个还是有问题的 

 那懒汉究竟怎样才能线程安全呢 

 那就进入到进化变异版了 
 双重检测锁 


 之前很多人 知其一不知其二 ,说它不推荐使用。
 但错了 , 是1.5之前不推荐 , 1.5之后已经没这个问题了 。原因:因为jdk又花了,好像是哪个关键字吧----volatile (
 new不是个原子操作,后面优化了volatile语义,然后双重变的正常了 
 现在懒汉 和 双重检测锁 说完了 

 继续饿汉式 

 饿汉式本身是线程安全的 原因也很简单 

 饿汉式在类创建的同时就已经创建好一个静态的对象供系统使用,以后不再改变,所以天生是线程安全的。 

 现在看看代码就知道了 


 但是饿汉式有个缺点是不能延时加载 
 再说个静态内部类的实现 


 这个也是线程安全的 , 并且可以实现延时加载 , 也是最为常用的 。 但是它们都有一个致命缺陷。

 对 类的方式都可以被反射 , 被序列化破解 
这是枚举的形式


 线程安全,调用效率高,但是,不能延时加载 
 能不能延时加载 调用效率 和 线程安全问题 。是你考虑使用何种单例实现的考量 

 静态内部类方式 也是可以被破解的 

 如果你的项目是内部项目 没必要非得使用枚举式 , 毕竟它不能够延时加载 






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值