反射破坏单例

本文介绍了单例模式的几种实现方式,重点讨论了懒汉式的双重检验锁(DCL)实现,解释了为何使用volatile关键字以确保可见性和有序性。同时提到了反射和序列化可能破坏单例的问题,以及如何通过重写readResolve方法解决序列化问题。
摘要由CSDN通过智能技术生成

单例模式有懒汉 饿汉 静态内部捏 枚举 的几种写法

 这里主要讲解一下 懒汉   dcl 双重检验锁的方式  为什么会在 对象上加volatile  因为普通的sync 加锁 虽然保证了有序性 但是他保证的是 as if seari 语义里面的 不改变最终结过下的 允许顺序交换的有序性  所以这里需要 加volatile  

 

饿汉式写法

还有静态内部类

 

对于以上懒汉式但是此种方式 也有一些问题 比如 反射可以破环单例  因为我们 私有的构造方法 此时 无法在外部进行创建对象 但是反射可以 允许访问 如下

就不能通过反射来破坏单例  但是 序列化呢 ? 序列化也会破坏单例 我们可以重写他的

readResolve()方法直接返回单例对象 即可解决

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值