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的答案所迷惑。
我对答案的理解是,这可以在单线程程序中发生。
如何或什么条件导致以下代码引发异常?
(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.remove
或ListIterator.add
通过迭代器修改列表(因为这样它就知道了修改,并且可以将其考虑在内)。
从文档中:
“并发”一词是指您在遍历期间正在修改列表。
关于java - 在Java中,如何在单线程程序中引发ConcurrentModificationException? [复制],我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5051879/