我有一个内部类,它使用类似于以下的方法实现 Iterable:
public Iterator iterator() {
return new Iterator() {
Foo foo = fooThreadLocal.get();
int bar = foo._bar;
void baz() {
System.out.println("" + bar);
System.out.println("" + foo);
}
public Object next() {
baz();
...
}
}
}
奇怪的是(对我来说),在某些情况下,在 baz 中 foo 的值为 null,但 bar 的值为 0(初始化字段时没有空指针异常)。此外,奇怪的是该字段首先为空,因为如果我打印堆栈跟踪,则会调用 ThreadLocal 的 set 方法,该方法使用新构造的 Foo 对象设置其值,但这可能是一个不同的问题.
有谁知道这里会发生什么?