我真的很想为这个问题提供一个最简单的工作示例,但我没有成功创建一个。所以我只会描述发生的事情,并希望有人能够帮忙。无法将成员变量设置为空
在我的代码地方,我有这些行:(此代码是大量的调试我已经做了找到我的问题的原因的结果)
long i = 0;
while (this.someField != null) {
this.someField = null;
i++;
}
long j = i;
此代码部署在WebLogic应用程序服务器上。我在while
循环之前设置了一个断点。我用IntelliJ远程调试代码。
当代码碰到断点时,我一步步执行它。代码只是循环遍历while
循环,但someField
永远不会变成null
。所以我在循环后面的行设置了第二个断点,并且继续点击。代码立即退出循环并停在此行。我可以告诉我没有更多的循环执行,因为之后我检查了i
。但是,this.someField
仍然不为空。我多次尝试过,所以我确信代码继续执行循环的原因是我正在调试它。
我不知道如何调试这个问题。我的观察没有任何意义(除非我应用量子力学)。什么会导致这种行为?这是我的JVM中的错误吗?调试器中的错误?还有别的吗?
编辑:
该字段声明如下:
private Vector<KeyValuePair> someField = null;
这是私人的,我保证是通过与它裂伤所有方法中设置断点没有被另一个线程改变。
任何机会并发性是神秘的一部分吗?你可以显示'someField'的定义吗? – Thomas
应用程序服务器上还有其他线程,但它们都运行在不同的部署中,并且不可能干扰此对象。 – flyx
我认为你需要更努力地产生一个最小的例子。目前你的问题是不可能回答的,目前还不清楚为什么你需要'while'循环来设置一个字段为'null'。 –