Art*_*bin 6 java concurrency concurrentmodification
我正在阅读这个" Freuqent Java并发问题 "的问题,并且在谈论java.util.ConcurrentModificationException的答案时感到困惑.
我对答案的理解是,这可能发生在单线程程序中.如何或什么条件导致以下代码抛出异常?
List<String> list = new ArrayList<String>(Arrays.asList("a", "b", "c"));
for (String string : list) { list.remove(string); }
Run Code Online (Sandbox Code Playgroud)
aio*_*obe 14
这个片段总是会抛出一个ConcurrentModificationException.
规则如下:使用迭代器迭代它时,您不能修改(添加或删除列表中的元素)(当您使用for-each循环时会发生这种情况).
但请注意,您可以通过迭代器修改列表(因为它知道修改,并且可以将其考虑在内)使用Iterator.remove或ListIterator.add.
来自文档:
此类的iterator和listIterator方法返回的迭代器是快速失败的:如果在创建迭代器之后的任何时候对列表进行结构修改,除了通过迭代器自己的remove或add方法之外,迭代器将抛出ConcurrentModificationException.
并发这里的单词指的是您在遍历期间修改列表.
| 归档时间: |
|
| 查看次数: |
3502 次 |
| 最近记录: |