使用for-each循环时LinkedList中的Nullpointer异常

我遇到了非常奇怪的Java行为,但我不知道这是一个bug,还是我错过了一些东西。

该代码只需遍历stateStack(LinkedList)列表并销毁所有状态。

public void clearStates()

{

LogFactory.getLog(StateController.class.getName())

.info( "Clearing states. #ofstates="+stateStack.size());

for (State state : stateStack) // Line 132 (see exception)

{

state.destroy();

}

// ...

}

引发了以下异常:

INFO  controllers.StateController : Clearing states. #ofstates=1

java.lang.NullPointerException\

at java.util.LinkedList$ListItr.next(LinkedList.java:891)

at *.controllers.StateController.clearStates(StateController.java:132)

// ... //

该代码通常可以正常工作,并且已经投入生产一年多了。

这可能是Java错误吗?

/ /

destroy()调用不会修改stateStack。如果可以的话,我猜Java会抛出ConcurrentModificationException。

stateStack填充了1个状态,该状态将覆盖destroy,但仅进行本地修改。然后,超级实现将打印不在日志文件中的其他日志(“销毁状态…”),因此我猜想该异常是在迭代开始时抛出的。

public void destroy()

{

destroyed = true;

LogFactory.getLog(State.class.getName()).info( "Destorying state : "+getClass().getName());

propertyChangeSupport.firePropertyChange(PROP_DESTROYED, null, this);

}

回答:

下面的代码几乎每次运行它都会生成相同的异常-

想法是在从另一个线程迭代时修改列表。由于幸运的时机,修改发生在该方法之后checkForComodification但之前,从而导致NPE。next

= next.next;``ListItr#next

java.util.LinkedList $ ListItr.next(LinkedList.java:891)处的线程“

main”中的java.lang.NullPointerException,javaapplication4.Test1.main(Test1.java:74)处的异常

public class Test {

public static void main(String[] args) {

final int SIZE = 100000;

final Random rand = new Random();

final List<Integer> list = new LinkedList<>();

for (int i = 0; i < SIZE; i++) {

list.add(i);

}

Runnable remove = new Runnable() {

@Override

public void run() {

while (true) {

int i = rand.nextInt(SIZE);

list.remove(i);

try {

Thread.sleep(10);

} catch (InterruptedException ex) {

break;

}

list.add(i);

}

}

};

Thread t = new Thread(remove);

t.start();

for (int i = 0; i < 100; i++) {

try {

for (Integer j: list) {

///whatever

}

} catch (ConcurrentModificationException e) {

} catch (NullPointerException e) {

e.printStackTrace();

}

}

t.interrupt();

}

}

以上是 使用for-each循环时LinkedList中的Nullpointer异常 的全部内容, 来源链接: utcz.com/qa/399177.html

回到顶部