`
zwh910621
  • 浏览: 146795 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

list 并发 java.util.ConcurrentModificationException

    博客分类:
  • Java
阅读更多

在遍历LIST里进行删除或修改会出现并发的解决方法

    private void testDelete() {
        List<String> list = new ArrayList<String>();
        for (int i = 0; i < 10; i++) {
            String str = "ck0" + i;
            list.add(str);
        }

        for (Iterator it = list.iterator(); it.hasNext();) {
            String str = (String) it.next();
            if (str.equals("ck05")) {
                // list.remove(str);  // 第一种删除方法
                it.remove();  // 第二种删除方法
            }
        }
    }

第一种方法就会出现 java.util.ConcurrentModificationException

第二种就没有问题

分享到:
评论

相关推荐

    java 集合并发操作出现的异常ConcurrentModificationException

    在Java编程中,`ConcurrentModificationException`是一个常见的运行时异常,主要出现在多线程环境下对集合类(如List、Set、Map等)进行并发修改时。然而,这个异常不仅限于多线程环境,即使在单线程中,如果在遍历...

    Java多线程安全集合

    Java的`java.util.concurrent`包提供了更为高效且专门设计用于并发操作的集合。比如: - `ConcurrentHashMap`:线程安全的哈希映射,比`synchronized Map`性能更好,因为它允许不同部分独立加锁,减少了锁竞争。 ...

    Java源码分析:深入探讨Iterator模式

    在Java编程语言中,集合框架(`java.util`包)提供了多种容器类来存储对象,如`List`、`Set`和`Map`等。为了遍历这些容器中的元素,Java引入了迭代器模式(Iterator Pattern),这是一种常用的设计模式,它提供了一...

    java 迭代及迭代器的小例子

    例如,在java.util.concurrent包中的ConcurrentLinkedQueue等线程安全的集合类,它们的迭代器是弱一致性(weakly consistent)的,这意味着迭代器不会抛出ConcurrentModificationException,但可能不反映对集合的...

    Java 7编程高级进阶

    `java.util.concurrent.ForkJoinPool`和`java.util.concurrent.RecursiveTask`是其核心类。 7. **非阻塞堆栈跟踪(Non-blocking Stack Traces)** 当线程处于等待状态时,Java 7可以生成不包含阻塞信息的堆栈跟踪...

    Java 实例 - 只读集合源代码+详细指导教程.zip

    List&lt;String&gt; immutableList = java.util.ImmutableCollections.listOf("Element1", "Element2"); ``` 除了这些内置的只读集合,你还可以自定义实现只读集合接口,如`List`, `Set`或`Map`,并重写所有可能改变集合...

    Java程序员容易犯的10个错误

    使用`synchronized`关键字、`java.util.concurrent`包中的工具,或者设计线程安全的数据结构来确保并发安全。 理解并避免这些常见错误能显著提高Java代码的质量和可靠性。在编程实践中,不断学习和总结错误是提升...

    java-collection-all-in-one.pdf

    在java.util包和java.util.concurrent包中,Java集合框架被细分为两大类:基础集合类和并发集合类。基础集合类主要用于单线程环境中,而并发集合类则专为多线程环境设计,提供了线程安全的集合操作。 Java集合框架...

    阿里巴巴Java代码规范PDF.zip

    - 使用`List.subList()`时,注意不要对原集合进行修改,否则可能引发`ConcurrentModificationException`。 7. **并发编程**: - 使用`synchronized`关键字或`java.util.concurrent`包中的工具类处理多线程同步...

    Java 10道中级面试题.docx

    - Java BlockingQueue 是并发编程的重要工具,属于 `java.util.concurrent` 包。它支持阻塞的插入和移除操作,等待元素可用或空间可用。这对于实现生产者消费者模式等多线程通信场景非常有用。 4. **...

    Java的CopyOnWriteArrayList功能详解,及无法保证数据是实时同步.docx

    Java中的`CopyOnWriteArrayList`是一个线程安全的列表...但如果读写比例接近,或者需要实时的数据一致性,可能需要考虑其他并发控制策略,如`ReentrantReadWriteLock`或使用`java.util.concurrent`包中的其他工具类。

    java基础 集合-22-迭代器设计模式

    Java中的`Iterator`接口位于`java.util`包下,它是所有迭代器的基类。它提供了三个核心方法: - `hasNext()`: 检查当前迭代器是否还有更多的元素,返回布尔值。 - `next()`: 返回集合中的下一个元素,如果已到达...

    Java程序员们最常犯的10个错误.docx

    然而,这返回的是一个内部类`java.util.Arrays.ArrayList`,它不支持添加元素。如果需要可变的`ArrayList`,应该使用构造函数来创建新的`ArrayList`,如: ```java ArrayList&lt;String&gt; arrayList = new ArrayList...

    ArrayList.docx

    `ArrayList`是Java中最常见的集合框架之一,它属于`java.util`包的一部分。`ArrayList`底层由数组实现,支持元素重复,并保持插入顺序,即有序性。对于增删操作,由于涉及到数组元素的移动,其效率相对较低;而查找...

    阿里巴巴java开发手册1.40版

    - 对共享资源进行原子操作,使用`synchronized`关键字或`java.util.concurrent`包下的工具类。 7. **设计模式**: - 推崇SOLID原则,即单一职责、开闭原则、里氏替换、接口隔离和依赖倒置。 - 使用工厂模式、...

    Java编码规范及实践

    - 使用`java.util.concurrent`包中的并发工具类,如ExecutorService、Semaphore等。 11. **单元测试** - 对关键逻辑编写单元测试,确保代码的正确性。 - 使用JUnit或其他测试框架,遵循 Arrange-Act-Assert 测试...

    迭代器的用法

    如果需要在多线程环境中安全地遍历集合,可以考虑使用`java.util.concurrent`包中的并发集合类,它们提供了线程安全的迭代器。 总之,迭代器是Java集合框架的重要组成部分,它为遍历和操作集合提供了统一的接口,...

    java集合代码

    ArrayList是Java中`java.util`包下的一个类,它是List接口的一个具体实现。ArrayList基于动态数组,允许我们在列表的任何位置插入和删除元素,提供了快速访问元素的能力。其内部实现通过扩容机制来保证在添加元素时...

Global site tag (gtag.js) - Google Analytics