`

java.util.ConcurrentModificationException 这个异常 针对MAP

 
阅读更多

在对一个map进行迭代遍历并删除一些符合条件的键值对的时候,容易出现
java.util.ConcurrentModificationException 这个异常

 

解决方法就是先用Iterator的方法remove,然后再调用HashMap的remove方法!!即代码如下:
Iterator<Integer> keys = gradeMap.keySet().iterator();
while(keys.hasNext()){
Integer i = keys.next();
if(!gradesIds.contains(i)){
keys.remove();    //先用Iterator的方法remove
gradeMap.remove(i);}
高并发,并且你的map是经常修改的,千万不要用HashMap,会把这个线常卡死的

要用ConcurrentHashMap ,线程安全

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    java.util.ConcurrentModificationException 解决方法

    java.util.ConcurrentModificationException 解决方法 在使用iterator.hasNext()操作迭代器的时候,如果此时迭代的对象发生改变,比如插入了新数据,或者有数据被删除。 则使用会报以下异常: Java.util....

    出现java.util.ConcurrentModificationException 问题及解决办法

    这个异常的产生是由于集合类(如HashMap)的非线程安全特性,当你在一个线程中使用迭代器遍历集合,而另一个线程在同时修改这个集合时,就会触发此异常。下面我们将深入探讨这个问题的原因、示例代码以及解决策略。 ...

    java.util.concurrent系列文章(1)

    本篇文章将深入探讨 `java.util.concurrent` 包中的一些核心概念和技术,特别是 `ConcurrentHashMap` 和 `CopyOnWriteArrayList` 这两个集合类。 #### 二、线程安全问题概述 线程安全性是指在多线程环境中,代码...

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

    这个异常是由于Java集合框架的迭代器(Iterator)遵循一种称为“快速失败”(fail-fast)的策略。当迭代器检测到集合在迭代过程中被修改,它会立即抛出`ConcurrentModificationException`,而不是尝试继续迭代或返回...

    Java语言的Util类详细介绍

    但是,因为Vector是同步的,当一个Iterator被创建而且正在被使用,另一个线程改变了Vector的状态(例如,添加或删除元素),Iterator将抛出ConcurrentModificationException异常。 Set接口是Collection接口的子接口...

    Java多线程安全集合

    - `CopyOnWriteArrayList`和`CopyOnWriteArraySet`:这些列表和集在线程安全的迭代器上有优势,因为它们在修改时复制底层数组,从而避免了迭代过程中的并发修改异常(`ConcurrentModificationException`)。...

    jdk 1.6 API 中文版帮助文档

    - `java.util.Set`和`java.util.Map`接口的实现:添加了`LinkedHashSet`和`LinkedHashMap`,保持插入顺序。 - `java.util.Iterator`的改进:支持`remove()`操作,避免抛出`ConcurrentModificationException`。 ### ...

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

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

    java实现遍历Map的方法

    在这种方法中,我们直接遍历Map的entrySet(),这样每次循环得到的是一个Map.Entry对象,包含了键值对的所有信息: ```java import java.util.HashMap; import java.util.Map; public class TestMap { public ...

    Java 7编程高级进阶

    在Java 7之前,你必须为每个类型的异常分别写一个`catch`块。但现在,可以使用`catch`块捕获多个不同类型的异常,只需用逗号分隔即可,这使得代码更简洁。 3. **类型推断(Type Inference for Generic Instance ...

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

    尝试修改这个只读列表将会抛出异常: ```java readOnlyList.add("New Element"); // 运行时会抛出UnsupportedOperationException ``` 另外,Java 8引入了不可变集合的概念,如`java.util.ImmutableCollections`类...

    使用Iterator接口遍历集合元素

    否则将会引发 java.util.ConcurrentModificationException 异常。 3. Iterator 迭代器采用的是快速失败(fail-fast)机制,一旦在迭代过程中检测到该集合已经被修改(通常是程序中其它线程修改),程序立即引发 ...

    13.foreach循环_java_

    这个小视频详细介绍了如何在Java中正确使用`foreach`循环,让我们深入探讨一下相关知识点。 首先,`foreach`循环在Java 5之后引入,它的目的是简化对数组和集合的遍历。传统的`for`循环在处理这些数据结构时,需要...

    java-collection-all-in-one.pdf

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

    Java HashMap 如何正确遍历并删除元素的方法小结

    这段代码将抛出 `java.util.ConcurrentModificationException` 异常,因为在遍历 HashMap 的元素过程中删除了当前所在元素,下一个待访问的元素的指针也由此丢失了。 2. 正确的删除方法 正确的删除方法是使用迭代...

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

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

    Java 10道中级面试题.docx

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

    多线程程序避免冲突的3条简单规则

    4. `java.util.concurrent.atomic`包:提供了一组原子类,如`AtomicInteger`、`AtomicLong`等,它们的原子操作在多线程环境中避免了锁的开销。 遵循以上规则,可以显著提高多线程程序的并发性能和稳定性。然而,...

Global site tag (gtag.js) - Google Analytics