Java 并发修改异常 (ConcurrentModificationException) 演示与解决方案
{"title":"Java 并发修改异常 (ConcurrentModificationException) 演示与解决方案","description":"本文将详细讲解Java中常见的并发修改异常 (ConcurrentModificationException),并通过示例代码演示如何避免该异常,并提供安全修改列表的最佳实践。","keywords":"java, 并发修改异常, ConcurrentModificationException, 迭代器, 迭代, 移除元素, 安全修改, ArrayList, List, 异常处理","content":"在Java中,如果在迭代列表时对列表进行了修改,则会引发ConcurrentModificationException异常。以下是一个演示这种异常的示例:\n\njava\nimport java.util.ArrayList;\nimport java.util.Iterator;\nimport java.util.List;\n\npublic class ConcurrentModificationDemo {\n public static void main(String[] args) {\n List<String> list = new ArrayList<>();\n list.add("A");\n list.add("B");\n list.add("C");\n\n // 创建迭代器\n Iterator<String> iterator = list.iterator();\n\n // 在迭代期间修改列表\n while (iterator.hasNext()) {\n String element = iterator.next();\n System.out.println(element);\n list.remove(element); // 修改列表\n }\n }\n}\n
\n\n在上述示例中,我们使用ArrayList创建了一个字符串列表,并向其添加了三个元素。然后,我们创建了迭代器来遍历该列表,并在迭代期间尝试删除元素。这将导致并发修改异常。\n\n运行上述代码会抛出ConcurrentModificationException异常,因为在迭代期间修改了列表。要避免这种异常,可以使用Iterator的remove()方法来删除元素,而不是直接使用列表的remove()方法。修改代码如下:\n\njava\nimport java.util.ArrayList;\nimport java.util.Iterator;\nimport java.util.List;\n\npublic class ConcurrentModificationDemo {\n public static void main(String[] args) {\n List<String> list = new ArrayList<>();\n list.add("A");\n list.add("B");\n list.add("C");\n\n Iterator<String> iterator = list.iterator();\n\n while (iterator.hasNext()) {\n String element = iterator.next();\n System.out.println(element);\n iterator.remove(); // 使用迭代器的remove()方法删除元素\n }\n }\n}\n
\n\n在这个修改后的代码中,我们使用了迭代器的remove()方法来删除元素。这样做不会引发并发修改异常,并且能够成功地删除列表中的元素。"}

原文地址: http://www.cveoy.top/t/topic/p3Ln 著作权归作者所有。请勿转载和采集!