`

hashset并发产生的java.util.ConcurrentModificationException解决办法

阅读更多
package com.yonge.concurrent;

import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Random;
import java.util.Set;

/**
 * 需求:解决hashset并发产生的java.util.ConcurrentModificationException异常
 * @author wb-gaoy
 * @version $Id: HashSetTest.java,v 0.1 2012-1-11 下午5:14:53 wb-gaoy Exp $
 */
public class HashSetTest {

    public static void main(String[] args) {

        final Set<Integer> set = Collections.synchronizedSet(new HashSet<Integer>());
        //开启A线程向set中放数据
        new Thread(new Runnable() {

            @Override
            public void run() {
                int i;
                while (true) {
                    try {
                        i = new Random().nextInt(1000);
                        System.out.println("准备加入到Set...");
                        set.add(i);
                        System.out.println("加入到Set:" + i);
                    } catch (Exception e) {
                        e.printStackTrace();
                        break;
                    }
                }
                System.exit(0);
            }
        }, "A").start();

        //开启B线程删除set中的数据
        new Thread(new Runnable() {

            @Override
            public void run() {
                Iterator<Integer> iter = null;
                while (true) {
                    synchronized (set) {
                        try {
                            iter = set.iterator();
                            System.out.println("开始迭代..");
                            int i;
                            while (iter.hasNext()) {
                                System.out.println("准备删除Set....");
                                i = iter.next();
                                iter.remove();
                                System.out.println("删除Set:" + i);
                            }
                        } catch (Exception e) {
                            e.printStackTrace();
                            break;
                        }
                    }
                }
                System.exit(0);
            }
        }, "B").start();
    }
}

 

1
3
分享到:
评论
1 楼 unsure520 2012-01-13  
        不小心踩了一脚

相关推荐

    java.util包

    1. 集合框架:Java.util包是Java集合框架的基础,包括List、Set、Queue和Map等接口,以及ArrayList、LinkedList、HashSet、HashMap等实现类。这些集合类为存储和操作对象提供了灵活的方式。例如,ArrayList实现了...

    java.util包总结

    Java.util包是Java标准库中的核心包之一,它包含了大量用于日常编程的工具类和接口。这个包在Java 2版本中得到了显著增强,引入了许多重要的数据结构和算法,为Java程序员提供了更丰富的功能。 首先,Java.util包中...

    JBuider第七章:Java.util包.rar

    Java.util.concurrent包(虽然不是直接在Java.util下,但密切相关)包含了一系列线程安全的数据结构和并发工具,如Semaphore、ExecutorService、CountDownLatch等,极大地简化了多线程编程。 8. **枚举Set**: ...

    过滤重复整数代码案例-java.doc

    import java.util.HashSet; import java.util.Set; public class RemoveDuplicates { public static void main(String[] args) { // 定义一个包含重复整数的数组 int[] nums = {1, 2, 2, 3, 4, 4, 5}; // 使用...

    java-util-iterator.pdf java-util-iterator.pdf

    根据提供的文件信息,本文将深入探讨Java中的`java.util.Iterator`接口及其在集合类中的应用。我们将从以下几个方面进行详细解析: ### 一、集合类的根接口:Collection `Collection`接口是Java集合框架的基础,它...

    java.util源码-java-util:javautil源代码

    11. **队列和并发队列**:`java.util.Queue`接口及其实现如ArrayDeque、LinkedList(作为Queue的实现),以及`java.util.concurrent`包下的并发队列如LinkedBlockingQueue、ConcurrentLinkedQueue等,提供高效的数据...

    28个java常用的工具类

    10. **`java.util.concurrent.*`**: 并发库,包括线程池、并发容器(如`ConcurrentHashMap`)、原子变量(如`AtomicInteger`)等。 11. **`java.io.File`**: 文件和目录操作,如创建、删除、读取文件信息。 12. **...

    30个常用java工具类

    11. **`java.util.HashSet`** 和 **`java.util.TreeSet`**:两种不同的Set实现,`HashSet`无序且不允许重复元素;`TreeSet`有序,支持自然排序或定制排序。 12. **`java.util.HashMap`** 和 **`java.util.TreeMap`*...

    Java源码解析——看优秀源码最能使人进步

    本文将对Java.lang.Object类、Java.lang.Integer类、Java.lang.String类、java.util.Arrays类、java.util.ArrayList类、java.util.LinkedList类、java.util.HashMap类、java.util.HashSet类、java.util....

    java工具类集合

    4. `java.util.HashSet` 和 `java.util.TreeSet`: - `HashSet` 是基于哈希表的无序集合,不允许有重复元素,不保证元素顺序。 - `TreeSet` 基于红黑树,自动保持元素的排序,可按照自然顺序或自定义比较器进行...

    Java常用工具类大全,工作5年精心整理.zip

    13. **`java.util.ArrayList`和`java.util.HashSet`的遍历**:迭代器(Iterator)和增强for循环(foreach)是常见的遍历方式,了解其原理和使用场景。 14. **`java.util.Properties`**:用于读写配置文件,常用于...

    java.Set(解决方案).md

    System.out.println("Size of hashSet: " + hashSet.size()); ``` 在这个示例中,我们创建了一个HashSet实例,并向其中添加了三个字符串元素。由于HashSet不允许重复,所以元素是唯一的。我们可以通过System.out....

    java工具类

    16. **`java.util.HashSet`** 和 **`java.util.TreeSet`**:两种不同的集合并实现,`HashSet`基于哈希表,`TreeSet`基于红黑树,保证元素有序。 17. **`java.util.HashMap`** 和 **`java.util.TreeMap`**:两种不同...

    最最常用的 100 个 Java类分享

    13. `java.util.HashSet`:HashSet是基于哈希表的Set实现,不保证元素顺序,允许空元素。 14. `java.io.BufferedReader`:BufferedReader用于高效地读取字符流,通过缓冲区进行操作。 15. `java.util.Collection`...

    Java6 API 中文

    `java.util.HashSet`和`java.util.TreeSet`分别是无序和有序的集实现,而`java.util.HashMap`和`java.util.TreeMap`则用于存储键值对。 3. **多线程**:Java 6 API中的`java.lang.Thread`类和`java.util.concurrent...

    java.util源码-java-source-code:java.util源码阅读

    Java.util 源码分析 Java.util 包是 Java 核心库的重要组成部分,它包含了许多用于日常编程的工具类和接口,如集合框架、日期时间处理、随机数生成、事件处理等。深入理解这个包的源码对于提升Java开发者的技能至关...

    java开发过程中常用的工具类

    9. **`java.util.HashSet` 和 `java.util.LinkedHashSet`**: `HashSet`是无序的不重复元素集合,而`LinkedHashSet`则保留了元素插入的顺序。 10. **`java.util.Iterator` 和 `java.util.stream.Stream`**: `...

    HashSet类的用法.pdf

    此外,`HashSet`是非同步的,这意味着多线程环境下的安全问题需要通过外部同步机制解决。 #### 二、特点 1. **无序性**:`HashSet`中的元素是无序的,即不能保证元素的存储顺序与插入顺序一致。 2. **非同步性**:...

Global site tag (gtag.js) - Google Analytics