java-重新理解:“instance = new Singleton();”

在Java指令中创建对象和赋值操作是分开进行的,也就是说instance = new Singleton();

语句是分两步执行的。但是JVM并不保证这两个操作的先后顺序,也就是说有可能JVM会为

新的Singleton实例分配空间然后直接赋值给instance成员,然后再去初始化这个Singleton实例。

这在单态设计模式的多线程中,会经常出错。

当一个A线程,执行完该语句但没有初始化这个实例,而B线程调用了该实例,则会报错。

 

单例模式使用内部类来维护单例的实现,JVM内部的机制能够保证当一个类被加载的时候,这个类的加载过程是线程互斥的。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。