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

时间:2015-04-28 17:28:57

标签: java multithreading variables null instance

我遇到过Java中的一些东西让我真的摸不着头脑,想弄清楚发生了什么。

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

objB.addListener(this);

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

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

objA.doSomething();

在objA:

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

在objB中:

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

再次在objA:

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

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

我在这里缺少什么?该实例变量如何为空?

1 个答案:

答案 0 :(得分:0)

这里只能发生两件事

  1. initInstanceVar();返回null
  2. 不知何故变量被垃圾收集器清理