java-重新理解:“instance = new Singleton();”
在Java指令中创建对象和赋值操作是分开进行的,也就是说instance = new Singleton();
语句是分两步执行的。但是JVM并不保证这两个操作的先后顺序,也就是说有可能JVM会为
新的Singleton实例分配空间,然后直接赋值给instance成员,然后再去初始化这个Singleton实例。
这在单态设计模式的多线程中,会经常出错。
当一个A线程,执行完该语句但没有初始化这个实例,而B线程调用了该实例,则会报错。
单例模式使用内部类来维护单例的实现,JVM内部的机制能够保证当一个类被加载的时候,这个类的加载过程是线程互斥的。