单例模式

双重判空
第一层防止多次加锁浪费资源
第二层判断instance是否已经初始化

A a = new A(); 分成三小步: 1、分配内存空间 2、创建实例对象 3、将地址和对象连接起来

volatile作用
防止指令重排序
如果不使用该关键字,123可能变成132。当线程A走到第二层判空时,实例化对象,释放锁资源。此时,实例对象还没有创建成功。线程B走到第一层判空,instance不为null,走不进去,获取不到锁资源。

在这里插入图片描述

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页