Java - 实例变量在同一线程中神秘地变为 null

Java - instance variables mysteriously becoming null in same thread

我在 Java 中遇到了一些让我绞尽脑汁想弄清楚发生了什么的事情。

我创建了一个对象 objA 并在其构造函数中将此对象添加到另一个对象 objB:

objB.addListener(this);

稍后在objA上调用一个方法,它调用objB中的一个方法,然后在objA上回调:

objA.doSomething() => objB.doSomethingAlso => objA.doSomethingElse()

objA.doSomething();

在对象A中:

public void doSomething() {
    _instanceVar = initInstanceVar();
    objB.doSomethingAlso();
}

在 objB 中:

public void doSomethingAlso() {
    ...
    getRefToObjA().doSomethingElse();
}

再次在 objA 中:

public void doSomethingElse() {
    _instanceVar.someMethod();
}

但是,当调用 doSomethingElse() 时,_instanceVar(实例变量!)现在为空。它在 doSomething() 中被初始化为一个非空值...那么它现在怎么可能为空呢?它没有在任何地方明确设置为空。所有这些方法调用(据我所知)都发生在同一个线程中。

我在这里错过了什么?该实例变量怎么可能为空?

这里只能发生两件事

  1. initInstanceVar(); returns 空
  2. 变量以某种方式被垃圾收集器清理