。由于收藏的内部状态变得不一致,因此出现了此例外。ConcurrentModificationException
>
<code class="language-java">Exception in thread "main" java.util.ConcurrentModificationException at java.base/java.util.ArrayList$Itr.checkForComodification(ArrayList.java:000) at java.base/java.util.ArrayList$Itr.next(ArrayList.java:000) at com.journaldev.ConcurrentModificationException.ConcurrentModificationExceptionExample.main(ConcurrentModificationExceptionExample.java:00)</code>在以下情况下发生此例外:
在迭代过程中进行
modCount
用于复制异常的此算法演示了如何在Java中触发a:
ConcurrentModificationException
ArrayList
>人口:ArrayList
>使用list.iterator()
(例如,添加或删除元素)。
ArrayList
ConcurrentModificationException
>
,因为在迭代器遍历它时修改了列表。
<code class="language-java">import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class ConcurrentModificationExample { public static void main(String[] args) { List<integer> myList = new ArrayList<>(); myList.add(1); myList.add(2); myList.add(3); Iterator<integer> iterator = myList.iterator(); while (iterator.hasNext()) { Integer value = iterator.next(); System.out.println("Value: " + value); if (value == 2) { myList.remove(value); // Modification during iteration! } } } }</integer></integer></code>安全修改技术
ConcurrentModificationException
myList.remove(value)
避免这种例外,请使用以下方法:
:
复制列表:Iterator.remove()
在迭代之前创建列表的副本并修改副本。
iterator.remove()
>或>。
将迭代和修改包装在同步块中,以确保线程安全。>
CopyOnWriteArrayList
ConcurrentHashMap
安全去除安全 此修订的代码可以安全地删除元素,而无需抛出异常。 请记住根据您的特定需求和并发要求选择适当的技术。 对于多线程方案,使用并发集合通常是首选。
>以上是在Java中使用迭代器时conturrentModification Exception的详细内容。更多信息请关注PHP中文网其他相关文章!