单例模式的双检索实现,是依赖于编译器的,很多平台和带优化的编译器,这样写是错误的。
如果编译成如下代码,那双检索的单例没有问题。
1. temp = 分配内存
2. 调用temp的Constructor
3. instance = temp
但如果编译优化,是存在问题的。
1. instance = 分配内存
2. 调用Constructor来初始化instance
例如: A进入到1,还没有上锁,然后被抢占;这时,B进入到1,发现instance不为空,直接返回,而这时instance的constructor并没有被调用。
阅读(569) | 评论(0) | 转发(0) |