单例懒汉模式问题

编程

    public class Singleton {

static Singleton instance;

static Singleton getInstance() {

if (instance == null) {

synchronized (Singleton.class) {

if (instance == null)

instance = new Singleton();

}

}

return instance;

}

}

  • 这里即便双层判断,还是可能出现问题,

    • 因为new 操作也是多条机器指令构成的

      1. 分配一块内存 M;
      2. 在内存 M 上初始化 Singleton 对象;
      3. 然后 M 的地址赋值给 instance 变量。
    • 编译优化后可能变成:

      1. 分配一块内存 M;
      2. 将 M 的地址赋值给 instance 变量;
      3. 最后在内存 M 上初始化 Singleton 对象。
    • 如果第2条指令执行完后,cpu切换,就会导致instance指向M地址,但是M地址并没有对象,空指针异常

以上是 单例懒汉模式问题 的全部内容, 来源链接: utcz.com/z/518407.html

回到顶部