下面的代码几乎每次运行它都会生成相同的异常-
想法是在从另一个线程迭代时修改列表。由于幸运的时机,修改发生在该方法之后
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(); }}


