Java单例

这个版本的代码看起来有点复杂,注意其中有两次if (instance == null)的判断,这个叫做『双重检查Double-Check』。

·       第一个if (instance == null),其实是为了解决Version2中的效率问题,只有instance为null的时候,才进入synchronized的代码段——大大减少了几率。

·       第二个if (instance == null),则是跟Version2一样,是为了防止可能出现多个实例的情况。

终极版本:volatile

对于Version3中可能出现的问题(当然这种概率已经非常小了,但毕竟还是有的嘛~),解决方案是:只需要给instance的声明加上volatile关键字即可,

Java单例

volatile关键字的一个作用是禁止指令重排,把instance声明为volatile之后,对它的写操作就会有一个内存屏障(什么是内存屏障?),这样,在它的赋值完成之前,就不用会调用读操作。


相关文章:

  • 2021-12-23
  • 2021-12-19
  • 2021-04-15
  • 2021-07-26
  • 2021-04-26
  • 2022-01-03
猜你喜欢
  • 2021-08-15
  • 2021-12-03
  • 2022-12-23
  • 2021-10-27
  • 2022-12-23
  • 2021-06-09
  • 2021-12-02
相关资源
相似解决方案