单例懒汉模式问题
public class Singleton { static Singleton instance;
static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null)
instance = new Singleton();
}
}
return instance;
}
}
- 这里即便双层判断,还是可能出现问题,
- 因为new 操作也是多条机器指令构成的
- 分配一块内存 M;
- 在内存 M 上初始化 Singleton 对象;
- 然后 M 的地址赋值给 instance 变量。
- 编译优化后可能变成:
- 分配一块内存 M;
- 将 M 的地址赋值给 instance 变量;
- 最后在内存 M 上初始化 Singleton 对象。
- 如果第2条指令执行完后,cpu切换,就会导致instance指向M地址,但是M地址并没有对象,空指针异常
- 因为new 操作也是多条机器指令构成的
以上是 单例懒汉模式问题 的全部内容, 来源链接: utcz.com/z/518407.html