volatile能够使得线程读取共享变量时从主内存中读取,保证了读取的数据一定是最新的,所以在线程A构建instance对象的时候,**即使发生了指令重排**使得线程B得到了一个未经初始化的变量,由于volatile的作用,线程B还是得重新从主内存中获取最新的数据。
https://blog.csdn.net/sinat_36572927/article/details/90021699