This question already has answers here:
Why is a ConcurrentModificationException thrown and how to debug it

(8个答案)


2年前关闭。




我正在阅读这个“Freuqent Java concurrency problems”问题,却被关于java.util.ConcurrentModificationException的答案所迷惑。

我对答案的理解是,这可以在单线程程序中发生。
如何或什么条件导致以下代码引发异常?
List<String> list = new ArrayList<String>(Arrays.asList("a", "b", "c"));
for (String string : list) { list.remove(string); }

最佳答案

此代码段将始终抛出ConcurrentModificationException

规则如下:在使用Iterator进行迭代(在使用for-each循环时会发生这种情况)时,您不能修改(从列表中添加或删除列表中的元素)。

但是请注意,允许您使用Iterator.removeListIterator.add通过迭代器修改列表(因为这样它就知道了修改,并且可以将其考虑在内)。

从文档中:



“并发”一词是指您在遍历期间正在修改列表。

关于java - 在Java中,如何在单线程程序中引发ConcurrentModificationException? [复制],我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5051879/

10-11 22:39
查看更多