`

线程并发工具--线程安全集合

 
阅读更多

一般的集合,如ArrayList、HashSet、HashMap等,都是线程不安全的。不安全的表现是什么?

ConcurrentModifyException

都知道,在遍历集合的时候不能对集合进行添加和删除操作,否则就会抛这个一场。如果一个线程正在遍历一个集合的时候另外一个线程往这个集合中增加或删除了元素,那么程序就会出这个异常。

这个异常的原理是,集合中有一个版本号,每次修改(添加或删除)集合的时候,版本号都会往上涨。当开始遍历集合的时候,先记录下这个版本号,在遍历期间,如果发现这个版本号和集合当前的版本号不等,就会抛这个异常。

死循环

集合的hasNext方法实现如下:

        public boolean hasNext() {
            return cursor != size;
        }
判断的是当前的游标是否和集合的大小相等。当一个线程在遍历集合的时候,cursor是一直往上涨的,直到“遇到"cursor==size()。一种情况是,刚好在这个线程快要结束遍历,即游标的值刚好等于size的时候,另外一个线程不小心从集合中remove了一个元素,那么size()就减小了,cursor不等于size了,然后cursor继续往上涨。这样,cursor就和size擦肩而过,永远也不能"相见"了,于是死循环了。


为此,Java提供了线程安全的集合,例如ConcurrentHashMap,CopyOnWriteArrayList。这些集合是线程安全的。不会出现ConcurrentModifyException和死循环的问题。


分享到:
评论

相关推荐

    WEBAPI多线程并发测试工具

    标题"WEBAPI多线程并发测试工具"指出,这是一个专门针对Web API进行多线程并发测试的工具。Web API通常指的是应用程序接口,它们允许不同的服务之间进行通信,以实现数据交换和功能整合。多线程并发测试则是验证在多...

    线程-线程池-锁-集合-Map-队列.docx

    综上所述,线程、线程池、集合和队列是Java并发编程的核心概念,理解和掌握它们对于开发高效、稳定的并发应用程序至关重要。在实际开发中,应根据具体需求选择合适的线程管理策略、数据结构和同步机制,以实现高性能...

    Java多线程实战精讲-带你一次搞明白Java多线程高并发

    - 使用并发集合而非普通集合,确保并发安全。 - 合理设置线程池参数,避免资源浪费。 以上内容覆盖了Java多线程的核心知识点,通过学习和实践,你将能够熟练应对各种高并发场景,提升代码的效率和稳定性。在Java...

    Java 多线程与并发-Java并发知识体系详解.pdf

    Java并发工具包J.U.C(Java Util Concurrency)包含了丰富的一系列并发组件,如Lock框架(ReentrantLock等)、并发集合(ConcurrentHashMap等)、原子类(AtomicInteger等)、线程池(ExecutorService)和工具类。...

    模拟jdbc多线程竞争资源---【Eclipse项目】

    - **并发集合**:使用并发友好的集合,如ConcurrentHashMap,可以在多线程环境下安全地存储和访问数据。 5. Eclipse项目实践: 这个项目可能是用Eclipse IDE创建的一个Java工程,包含示例代码来模拟多线程环境下...

    Java多线程与线程安全实践-基于Http协议的断点续传.rar

    在这个项目中,开发者将学习如何利用Java的并发工具如Thread类和Runnable接口来创建和管理多个线程,同时确保在文件传输过程中的数据一致性和传输效率。此外,项目还涵盖了异常处理、网络IO操作、文件IO操作等核心...

    Java多线程安全集合

    在Java编程中,多线程安全集合是程序员在并发环境下处理数据共享时必须考虑的关键概念。这些集合确保了在多个线程访问时的数据一致性、完整性和安全性,避免了竞态条件、死锁和其他并发问题。Java提供了一系列的线程...

    java-java面试题库整理-基础-JVM-线程并发-框架等.zip

    为了在激烈的Java开发者竞争中脱颖而出,深入理解Java基础知识、JVM(Java虚拟机)、线程并发以及常用框架是至关重要的。这份"java-java面试题库整理-基础-JVM-线程并发-框架等.zip"文件提供了一个全面的复习资源,...

    多线程精品资源--这是RedSpider社区成员原创与维护的Java多线程系列文章。.zip

    - **同步机制**:为了避免多个线程并发访问共享资源导致的数据不一致,Java提供了synchronized关键字、Lock接口(如ReentrantLock)以及 volatile 关键字来实现线程同步。 - **死锁**:当两个或更多线程相互等待...

    多线程并发集合资料.zip

    在Java编程中,多线程并发集合是程序员在开发高并发应用时必须掌握的重要概念。这些集合类的设计目的是为了在多线程环境下提供高效、安全的数据共享,避免数据竞争和死锁等问题。以下是对给定文件中涉及知识点的详细...

    Java 多线程与并发(14-26)-JUC集合- CopyOnWriteArrayList详解.pdf

    ### Java多线程与并发(14-26)-JUC集合-CopyOnWriteArrayList详解 #### 一、概述 `CopyOnWriteArrayList`是一种线程安全的集合类,它是`ArrayList`的一种特殊版本,主要通过复制底层数组的方式来保证线程安全性。...

    java多线程并发

    ### Java多线程并发知识点详解 ...综上所述,Java中的多线程并发机制非常强大,不仅提供了基本的同步手段,还有丰富的工具类帮助开发者更加高效地管理和调度线程,极大地提高了程序的并发性能和资源利用率。

    Java多线程与线程安全实践-基于Http协议的断点续传的实现.rar

    线程安全性:由于涉及多线程并发处理,需要考虑线程安全性。可以使用Java中的同步机制,如使用synchronized关键字或者使用线程安全的集合类来保证多线程操作的安全性。 实现步骤: 创建一个下载管理器类,用于管理...

    JAVA多线程与线程安全实践-基于Http协议的断点续传.rar

    在Java编程中,多线程和线程安全是核心概念,尤其在开发高效并发应用程序时。本项目"JAVA多线程与线程安全实践-基于Http协议的断点续传"探讨了如何在Java中实现多线程以及如何确保线程安全,特别是在处理HTTP协议的...

    Java 多线程与并发(15-26)-JUC集合- ConcurrentLinkedQueue详解.pdf

    - **线程安全性**:`ConcurrentLinkedQueue`提供了线程安全的队列操作,能够支持多个线程并发地读写队列而不必担心数据一致性问题。 - **无界性**:作为无界的队列,`ConcurrentLinkedQueue`理论上可以无限添加元素...

    Java多线程与线程安全实践-基于Http协议的断点续传

    4. **并发容器**:Java集合框架中的Concurrent包提供了线程安全的容器,如ConcurrentHashMap和CopyOnWriteArrayList,它们在内部实现了线程安全的算法,使得并发操作无需额外的同步措施。 现在,我们转向基于HTTP...

    JAVA多线程与线程安全实践-基于Http协议的断点续传

    在Java编程中,多线程和线程安全是核心概念,尤其在开发高效、响应迅速的应用时更是不可或缺。本主题将深入探讨如何在Java中实现多线程,并结合HTTP协议来实现断点续传功能,这在大文件传输场景中非常实用。 一、...

    Java多线程运算集合

    - Java提供了多种同步机制来解决多线程并发访问同一资源时可能出现的问题,如同步方法、同步块等。 - 同步方法通过 `synchronized` 关键字修饰类的方法,同步块则通过对特定对象加锁实现。 - **锁机制**: - 锁...

    Java 多线程与并发(13-26)-JUC集合- ConcurrentHashMap详解.pdf

    【Java 多线程与并发】并发集合类`ConcurrentHashMap`是Java程序设计中一个重要的工具,尤其在高并发场景下,它提供了高效的线程安全。`ConcurrentHashMap`在JDK 1.7和1.8中有着显著的区别。 在JDK 1.7中,`...

    Java 多线程与并发(1-26)-Java 并发 - 理论基础.pdf

    Java 中的并发机制还涉及到可重入锁、volatile 变量、final 变量、原子操作和并发集合等多个方面。 Java 多线程与并发是 Java 编程语言中的一种机制,用于解决并发问题,提高程序的执行效率和响应速度。 知识点...

Global site tag (gtag.js) - Google Analytics