Toc
0 results found
BOBO
单例模式
2020/07/25 设计模式
  • 背景
    • 对象半初始化
      • 对象在创建时,先在堆分配内存空间,这时对象为默认值,此时为半初始化状态
      • 执行对象的构造方法后,对象完成初始化
    • 指令重排序
      • 为提高程序执行效率,在程序执行前,编译器/处理器对指令进行重新排序
  • 造成问题
    • 多线程情况下
    • 指令重排序导致对象的赋值在对象构造方法前执行
    • 线程可能取到半初始化的对象
  • 解决方法
    • 给变量添加 volatile 关键字
      • 确保变量的可见性
      • 防止指令重排序
  • Double Check Lock (DCL)
    • 结构:空验证 + 同步锁 + 空验证
    • 保证多线程场景下的,单例对象创建的线程安全

f3262ef8152517d3b11bfc3f2d2b12d3.png

支付宝
微信
Simple is Awesome