其他分享
首页 > 其他分享> > 单例模式双重验证锁

单例模式双重验证锁

作者:互联网

 

 沒有将变量设置成volatile,会有下面问题:

new是操作不说原子性的,他包含操作:

1,分配内存地址,allocate memory

2,初始化对象, initialize object

3,将引用变量指向内存,make referent variable point to memory

由于jvm的重排列re-order问题,会将2和3调转,导致沒有完成初始化就使用而有epx

加了volatitle禁止了重排列,导致了再获得对象前,都会被阻塞在同步代码块中。

所以核心问题就是:在初始化时候同步了,而沒有在修改操作中同步。

引申问题:一个变量在不同的同步块中是不会同步的。

 

标签:初始化,同步,变量,验证,双重,单例,memory,操作,沒有
来源: https://www.cnblogs.com/vhyc/p/12076048.html