在Java中,当一个线程正在遍历一个集合(如List)并且另一个线程在同时修改这个集合时,就会抛出ConcurrentModificationException异常。这是因为在遍历过程中,集合的结构发生了改变,导致迭代器抛出异常。
解决这个问题的方法之一是使用迭代器的remove()方法来删除元素,而不是使用集合的remove()方法。另外,可以使用并发集合(如ConcurrentHashMap、CopyOnWriteArrayList等)来代替普通的集合。
以下是一个示例代码,展示了如何解决ConcurrentModificationException异常:
// 使用迭代器的remove()方法删除元素
List list = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));
Iterator iterator = list.iterator();
while (iterator.hasNext()) {
Integer num = iterator.next();
if (num % 2 == 0) {
iterator.remove(); // 使用迭代器的remove()方法删除元素
}
}
System.out.println(list); // 输出:[1, 3, 5]
// 使用并发集合(CopyOnWriteArrayList)代替普通的集合
List list = new CopyOnWriteArrayList<>(Arrays.asList(1, 2, 3, 4, 5));
for (Integer num : list) {
if (num % 2 == 0) {
list.remove(num);
}
}
System.out.println(list); // 输出:[1, 3, 5]
注意:在使用并发集合时,需要根据具体的业务需求选择适合的并发集合类。