并发修改异常

并发修改异常(Concurrent Modification Exception)是指在多线程环境下,当一个方法检测到对象的并发修改,但不允许这种修改时,抛出的一种异常。换句话说,当两个或多个线程同时对一个对象进行修改时,可能会导致数据不一致或其他问题,从而触发并发修改异常。
并发修改异常通常发生在使用迭代器遍历集合时,并在遍历过程中直接修改集合元素的情况下。例如,在使用 Java 中的 ArrayList 时,如果同时在迭代器遍历过程中删除或添加元素,就会可能导致并发修改异常。
以下是一个并发修改异常的案例:

import java.util.ArrayList;  
import java.util.Iterator;  
import java.util.List;
public class ConcurrentModificationExceptionTest {  
    public static void main(String[] args) {  
        List<String> list = new ArrayList<>();  
        list.add("A");  
        list.add("B");  
        list.add("C");
        Iterator<String> iterator = list.iterator();  
        while (iterator.hasNext()) {  
            String item = iterator.next();  
            if (item.equals("B")) {  
                list.remove(item); // 删除元素 B  
            } else {  
                list.add(item); // 添加元素  
            }  
        }  
    }  
}

在这个案例中,我们使用迭代器遍历 ArrayList,并在遍历过程中删除和添加元素。这会导致并发修改异常,因为迭代器在遍历过程中会跟踪列表的修改。当删除或添加元素时,迭代器会检测到结构的更改,从而抛出并发修改异常。
为了避免并发修改异常,可以在遍历集合时使用迭代器的 remove() 方法来删除元素,而不是直接调用集合的 remove() 方法。这样可以确保在迭代过程中不会发生并发修改问题。

你可能感兴趣的:(java)