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

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

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

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

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

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

 

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

posted @ 2015-04-13 11:08  beyondbycyx  阅读(233)  评论(0编辑  收藏  举报