双重检查的单例模式之volatile

 

此处volatile用来防止指令重排,Singleton初始化过程经过指令重排序后,有可能是这样的:

1、分配对象内存

2、将内存地址赋值给uniqueInstance引用

3、进行默认初始化和显示初始化

因此其他线程有可能会拿到一个未初始化完成的uniqueInstance。(即第2步后,cpu的时间分片分配给另一个线程)

 

参考书籍:head first 设计模式-第5章-第82页

双重检查的单例模式之volatile