JAVA Concurrent包 中的并发集合类

AI Agent Harness内容审核:生成内容合规 在过去的几年里,生成式人工智能(Generative AI)技术取得了爆炸性的发展。从 GPT-4、Claude 这样的文本生成模型,到 Midjourney、Stable Diffusion 这样的图像生成工具,再到 Sora 这样的视频生成模型,AI 已经具备了媲美甚至超越人类的内容创作能力。然而,技术是一把双刃剑。随着生成式 AI 的普及,内容安全与合规风险也呈指数级增长。 阅读详情

我们平时写程序需要经常用到集合类,比如ArrayList、HashMap等,但是这些集合不能够实现并发运行机制,这样在服务器上运行时就会非常的消耗资源和浪费时间,并且对这些集合进行迭代的过程中不能进行操作,否则会出现错误,例如下面程序:
[java] 
public class CollectionModifyExceptionTest { 
    public static void main(String[] args) { 
        Collection users = new ArrayList(); 
        users.add(new User("张三",28));    
        users.add(new User("李四",25));            
        users.add(new User("王五",31));    
        Iterator itrUsers = users.iterator(); 
        while(itrUsers.hasNext()){ 
            System.out.println("正在执行!"); 
            User user = (User)itrUsers.next(); 
            if("李四".equals(user.getName())){ 
                users.remove(user); 
            } else { 
                System.out.println(user);                
            } 
        } 
    } 
}    
       程序在执行过程中会报错, 因为定义了一个ArrayList类型的集合,但是在对集合进行迭代的时候又出现了users.remove(user),即从集合从删除数据,对于普通的集合来说这是不允许的,Java 5以后出现的并发集合类就是专门针对普通集合出现不能并发和不能在迭代过程中修改数据等问题而出现的。
     
 并发集合类主要有:
ConcurrentHashMap;          ConcurrentSkipListMap;              ConCurrentSkipListSet;           CopyOnWriteArrayList; CopyOnWriteArraySet;         ConcurrentLinkedQueue;

下面其中的某些集合类进行分别简述:

 ConcurrentHashMap支持完全并发的检索和更新所希望的可调整并发的哈希表。此类遵守与 Hashtable 相同的功能规范,并且包括对应于 Hashtable 的每个方法的方法版本。不过,尽管所有操作都是线程安全的,但检索操作不 必锁定,并且不 支持以某种防止所有访问的方式锁定整个表。此类可以通过程序完全与 Hashtable 进行互操作,这取决于其线程安全,而与其同步细节无关。
主要构造方法有:
[java] 
ConcurrentHashMap();  //创建一个带有默认初始容量、加载因子和 concurrencyLevel 的新的空映射。 
ConcurrentHashMap(int initialCapacity);   //创建一个带有指定初始容量、默认加载因子和 concurrencyLevel 的新的空映射。 
ConcurrentHashMap(int initialCapacity, float loadFactor, int concurrencyLevel);  //创建一个带有指定初始容量、加载因子和并发级别的新的空映射。 
ConcurrentHashMap(Map<> t);    //构造一个与给定映射具有相同映射关系的新映射。 

ConcurrentLinkedQueue是一个基于链接节点的、无界的、线程安全的队列。此队列按照 FIFO(先进先出)原则对元素进行排序,队列的头部 是队列中时间最长的元素。队列的尾部 是队列中时间最短的元素。新的元素插入到队列的尾部,队列检索操作从队列头部获得元素。当许多线程共享访问一个公共 collection 时,ConcurrentLinkedQueue 是一个恰当的选择,此队列不允许 null 元素。
主要构造方法有:
[java] 
ConcurrentLinkedQueue();  //创建一个最初为空的 ConcurrentLinkedQueue。 
ConcurrentLinkedQueue(Collection<> c);// 创建一个最初包含给定 collection 的元素的 ConcurrentLinkedQueue,按照此 collection 迭代器的遍历顺序来添加元素 

CopyOnWriteArrayList是ArrayList 的一个线程安全的变形,其中所有可变操作(添加、设置,等等)都是通过对基础数组进行一次新的复制来实现的。这一般需要很大的开销,但是当遍历操作的数量大大超过可变操作的数量时,这种方法可能比其他替代方法更 有效。在不能或不想进行同步遍历,但又需要从并发线程中排除冲突时,它也很有用。“快照”风格的迭代器方法在创建迭代器时使用了对数组状态的引用。此数组在迭代器的生存期内绝不会更改,因此不可能发生冲突,并且迭代器保证不会抛出 ConcurrentModificationException。自创建迭代器以后,迭代器就不会反映列表的添加、移除或者更改。不支持迭代器上更改元素的操作(移除、设置和添加)。这些方法将抛出 UnsupportedOperationException。
主要构造方法有:
[java] 
CopyOnWriteArrayList();  // 创建一个空列表。 
CopyOnWriteArrayList(Collection<> c); //按照 Collection 的迭代器返回元素的顺序,创建一个包含指定 Collection 的元素的列表。 
CopyOnWriteArrayList(E[] toCopyIn);   //创建一个新的 CopyOnWriteArrayList,它保持给定数组的副本。 

CopyOnWriteArraySet是对其所有操作使用 CopyOnWriteArrayList 的 Set。因此,它共享以下相同的基本属性:
它最适合于 set 大小通常保持很小、只读操作远多于可变操作以及需要在遍历期间防止线程间冲突的应用程序。
它是线程安全的。
因为通常需要复制整个基础数组,所以可变操作(添加、设置、移除,等等)的开销巨大。
迭代器不支持可变移除操作。
使用迭代器进行遍历的速度很快,并且不会与其他线程发生冲突。在构造迭代器时,迭代器依赖于不变的数组快照。
主要构造方法包括:
[java] 
CopyOnWriteArraySet();   //创建一个空 set 
CopyOnWriteArraySet(Collection<> c);   //创建一个包含指定 Collection 中所有元素的 set 

      
        讲完并发集合类以后再回到本文刚开始的例子中,如果将Collection users = new ArrayList();改写成Collection users = new CopyOnWriteArrayList();再运行程序,程序就会正常进行了,结果如下:
[java]
正在执行! 
{name:'张三',age:28} 
正在执行! 
正在执行! 
{name:'王五',age:31} 

基于A*算法的二维栅格地图路径规划与避障MATLAB仿真 本文将介绍如何使用MATLAB编写基于A*算法的二维栅格地图路径规划与避障的仿真程序。我们可以使用二维数组表示地图,其中每个元素表示一个栅格的状态,例如1表示障碍物,0表示可行走区域。接下来,我们需要定义A*算法的节点类。G值表示从起始节点到当前节点的代价,H值是启发式函数估计的从当前节点到目标节点的代价。算法,我们可以有效地找到起始点到目标点的最短路径,并在仿真中进行可视化展示。算法的基本思路是从起始节点开始,按照一定的启发式函数选择下一个节点,直到找到目标节点或者遍历完所有可行走区域。 阅读详情

相关推荐

SurfaceControlViewHost使用介绍

可以看到,主要用途:是把一个进程的View显示到另外一个进程里面。

chadm.xiang 1287

\(^_^)/ Java中的并发集合(Concurrent Collections)

    并发集合:   用于多线程上下文中的 Collection 实现:ConcurrentHashMap、ConcurrentSkipListMap、ConcurrentSkipListSet、CopyOnWriteArrayList 和 CopyOnWriteArraySet。 当期望许多线程访问一个给定 collection 时,ConcurrentHashMap 通常优于同步...

yanguz的专栏 298

基于STM32的馆藏文物保存环境监测系统设计与实现

针对馆藏文物保存环境中温湿度、光照、有害气体等参数波动易导致文物损坏的问题,本文设计了一种基于STM32微控制器的馆藏文物保存环境监测系统。该系统以STM32L431RCT6为核心,集成高精度传感器实现多参数实时采集,通过有线与无线结合的通信方式构建监测网络,具备数据存储、异常预警、远程监控等功能。测试结果表明,系统温湿度测量精度分别达±0.2℃、±2%RH,光照与有害气体检测误差≤5%,可满足文物保存环境的高精度监测需求,为文物保护提供科学的数据支撑。

m0_74026776的博客 1543

并发集合(Concurrent Collections)是Java提供的一种在多线程环境中使用数据集合的方式

并发集合(Concurrent Collections)是Java提供的一种在多线程环境中使用数据集合的方式。它们通过提供线程安全的方式来避免数据竞争和线程阻塞。

[Blog][Domain] programb.blog.youkuaiyun.com 1162

RIGOL DS1102E示波器新手必看:从开机到捕获第一个波形的5分钟指南

本文为RIGOL DS1102E示波器新手提供了一份快速上手指南。内容涵盖从开机、探头校准到捕获第一个波形的完整流程,重点解析了触发设置、自动测量等核心操作,并指出了探头衰减比设置等常见误区,帮助用户快速掌握这款经典数字示波器的基本使用方法。

dream的博客 740

MT6816磁编码器在无人机电调中的实战应用:从选型到调试全记录

本文详细介绍了MT6816磁编码器在无人机电调系统中的实战应用,涵盖选型、硬件集成、软件配置到飞行测试的全流程。通过对比霍尔传感器和光电编码器,突出MT6816在角度分辨率、安装公差和抗振动能力等方面的优势,为无人机动力系统提供高精度控制解决方案。

pandas7gardener的博客 234

java多线程之路之线程安全的集合—Core Java学习

qqq

678

医药领域知识图谱快速及医药问答项目(项目全过程)

该项目是中科院软件所刘焕勇老师在github上的开源项目,基于知识图谱的医药领域问答项目 Github项目地址:mirrors / liuhuanyong / qasystemonmedicalkg · GitCode 一、项目环境搭建 该部分要十分注意,由于版本升级的问题,一些用法及格式已经不兼容了。 python3.8 下载地址:Python Release Python 3.8.10 | Python.orght...

qq_52062182的博客 9917

第六章 Concurrent Collections (并发集合类) 【上】

本章涉及内容: 使用非阻塞、线程安全lists集合使用阻塞、线程安全lists集合通过优先级确定顺序来使用阻塞式线程安全lists集合通过延迟元素来使用线程安全lists集合使用线程安全导航maps集合生成一个并发随机数使用原子变量使用原子数组 1、简介 数据结构是程序最基础的元素。Java API提供java 集合框架来管理数据,当你在选择集合类要特别小心,有些集合类并不支持并

往前的娘娘 1674

手把手教你学Simulink——基于经典PID控制的电机系统场景实例:BLDC电机PID电流控制策略仿真

*无刷直流电机(Brushless DC Motor, BLDC)**因其高效率、长寿命和低维护成本,在众多领域如家用电器、工业自动化、电动汽车等得到了广泛应用。为了实现对BLDC电机的有效控制,通常采用基于霍尔传感器或反电动势检测的换相技术,并结合电流闭环控制以提高系统的动态响应和稳定性。本教程将带你使用构建一个基于PID控制的BLDC电机电流控制策略仿真模型BLDC电机建模PID控制器设计与应用系统仿真与调试控制效果分析本文介绍了如何使用构建一个。

MHD0815的博客 197

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Java并发基础:一文讲清util.concurrent包的作用

java.util.concurrent包是 Java 中用于并发编程的重要工具集,提供了线程池、原子变量、并发集合、同步工具类、阻塞队列等一系列高级并发工具类,使用这些工具类可以极大地简化并发编程的难度,减少出错的可能性,提高程序的效率和可维护性。

科技互联网领域深度探索者,乐于分享与写作。 2489

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Java线程(十四):Concurrent包中强大的并发集合类

我们平时写程序需要经常用到集合类,比如ArrayList、HashMap等,但是这些集合不能够实现并发运行机制,这样在服务器上运行时就会非常的消耗资源和浪费时间,并且对这些集合进行迭代的过程中不能进行操作,否则会出现错误,例如下面程序: public class CollectionModifyExceptionTest { public static void main(String

且听风吟的专栏 3906

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Concurrent包里的其他东西:ArrayBlockingQueue、CountDownLatch等等

Concurrent包里的其他东西:ArrayBlockingQueue、CountDownLatch等等。 java.util.concurrent包分成了三个部分,分别是java.util.concurrent、java.util.concurrent.atomic和java.util.concurrent.lock。内容涵盖了并发集合类、线程池机制、同步互斥机制、线程安全的变量更新工具类、...

tianhouquan的专栏 466

多线程一(长期收集更新)

1.线程的五个状态 新建(new)->就绪(runnable)->运行(running)->阻塞(blocked)->终止(dead) 2.线程的创建方式 a.集成Thread类 (不推荐) b.实现runnable接口(需要借助共享变量获取执行结果)c.实现Callable接口(可通过future和Callable获取执行结果,抛出异常) 3.线程安全 伟大...

it_zhouzhenfeng的专栏 226

java.util.concurrent(JUC)的研究----概述

从JDK 1.5开始,增加了java.util.concurrent包,它的引入大大简化了多线程程序的开发。 java.util.concurrent包分成了三个部分,分别是java.util.concurrent、java.util.concurrent.atomic和java.util.concurrent.locks。内容涵盖了并发集合类、线程池机制、同步互斥机制、线程安全的变量更新工具类

Davin_(幸福在于感悟).......... 1176

java.util.concurrent介绍

java.util.concurrent 包含许多线程安全、测试良好、高性能的并发构建块。不客气地说,创建 java.util.concurrent 的目的就是要实现 Collection 框架对数据结构所执行的并发操作。通过提供一组可靠的、高性能并发构建块,开发人员可以提高并发类的线程安全、可伸缩性、性能、可读性和可靠性。 如果一些类名看起来相似,可能是因为 java.util.concurrent 中的许多概念源自 Doug Lea 的 util.concurrent 库。 JDK 5.0 中的并发改进

weixin_53341657的博客 3917

executors java 深圳_Java多线程之ExecutorService

讲到Java多线程,大多数人脑海中跳出来的是Thread、Runnable、synchronized……这些是最基本的东西,虽然已经足够强大,但想要用好还真不容易。从JDK 1.5开始,增加了java.util.concurrent包,它的引入大大简化了多线程程序的开发(要感谢一下大牛Doug Lee)。 java.util.concurrent包分成了三个部分,分别是java.util.conc...

weixin_39524247的博客 97

JAVA线程安全集合

java.util.concurrent提供了队列和三列表的高校实现:concurrentLinkedQueue和concurrentHashMap.copyOnWriteArrayList和copyOnWriteArraySet 是线程安全的集合。

daniel的专栏 566

Java常用线程安全容器

Java提供了多种线程安全容器,主要分为并发集合类、阻塞队列和其他线程安全容器。并发集合类包括CopyOnWriteArrayList(读多写少)、ConcurrentHashMap(高并发Map)等;阻塞队列如ArrayBlockingQueue、LinkedBlockingQueue适合生产者-消费者模式;还有非阻塞队列ConcurrentLinkedQueue。传统线程安全容器如Vector性能较差。

qq_46130027的博客 675
上一篇: Java 并发工具包 java.util.concurrent 大全
下一篇: mysql 悲观锁 的运用
大树叶
博客等级 码龄12年 1171粉丝 664原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值