单例模式双重验证锁

 

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

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

1,分配内存地址,allocate memory

2,初始化对象, initialize object

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

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

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

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

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

 

相关文章:

  • 2022-12-23
  • 2022-03-12
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-01-20
  • 2022-12-23
猜你喜欢
  • 2021-07-28
  • 2021-05-19
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-03-31
相关资源
相似解决方案