在 Java 中迭代同步集合时出现 ConcurrentModificationException

问题描述 投票:0回答:1

我目前正在开发一个多线程 Java 应用程序,其中有一个同步集合(例如 Collections.synchronizedList)来存储一些数据。在我的代码的一部分中,我有一个循环遍历该集合,而另一个线程可能同时添加或删除元素。

但是,我在迭代过程中遇到了 ConcurrentModificationException,尽管我认为使用同步集合应该可以防止这个问题。如何安全地迭代 Java 中的同步集合而不遇到此异常?

这是我的代码的简化版本:

List<String> synchronizedList = Collections.synchronizedList(new ArrayList<>());

// ...

synchronized (synchronizedList) {
    Iterator<String> iterator = synchronizedList.iterator();
    while (iterator.hasNext()) {
        String element = iterator.next();
        // Some processing...
    }
}

我错过了什么或做错了什么?关于如何在不影响线程安全的情况下处理并发修改有什么建议吗?

java collections synchronized
1个回答
0
投票

请使用fori而不是foreach,因为fori的底层就是它。

© www.soinside.com 2019 - 2024. All rights reserved.