首先,给个大家肯定的答案:是要加volatile的。
我们先写一个DCL,如图:
我们可以发现synchronized前后都进行单例是非为空的判断,这就是DCL,那为什么要加violate呢?我们先来看看new一个实例的过程:
我们通过new实例的字节码看到,其实new实例有五步:
一、安装对象大小分配一个内存,里面有成员变量,赋给成员变量一个默认的初始值,这一步也可称之为对象实例的半初始化。例如:int类型的最小值是0,就将0赋给m;
首先,给个大家肯定的答案:是要加volatile的。
我们先写一个DCL,如图:
我们可以发现synchronized前后都进行单例是非为空的判断,这就是DCL,那为什么要加violate呢?我们先来看看new一个实例的过程:
我们通过new实例的字节码看到,其实new实例有五步:
一、安装对象大小分配一个内存,里面有成员变量,赋给成员变量一个默认的初始值,这一步也可称之为对象实例的半初始化。例如:int类型的最小值是0,就将0赋给m;