线程 - 同步 - 并发 - 同步容器和并发容器总结

NXP LPC54S018M-EVK开发板OOB项目实战:从环境搭建到外设自检全解析 嵌入式开发中,评估板是快速验证硬件和熟悉软件生态的关键工具。其核心原理在于通过官方提供的综合演示项目,对板载核心外设进行系统化测试,从而验证硬件功能并理解驱动架构。这一过程的技术价值在于,它为新开发者提供了一个近乎零门槛的起点,能够跳过繁琐的底层配置,直接建立对芯片能力和开发流程的直观认知。在工程实践中,这尤其适用于快速评估芯片适用性或学习特定微控制器系列。以NXP LPC54S018M-EVK开发板为例,其开箱即用(OOB)项目便是一个典型的硬件自检程序,它系统性地测试了SDRAM、SD卡、LCD、以太网 阅读详情
  • 1、什么是同步容器?

同步容器通过synchronized关键字修饰容器保证同一时刻内只有一个线程在使用容器,从而使得容器线程安全。synchronized的意思是同步,它体现在将多线程变为串行等待执行。(但注意一点,复合操作不能保证线程安全。举例:A线程第一步获取尾节点,第二步将尾结点的值加1,但在A线程执行完第一步的时候,B线程删除了尾节点,在A线程执行第二步的时候就会报空指针)

  • 2、什么是并发容器?

并发容器指的是允许多线程同时使用容器,并且保证线程安全。而为了达到尽可能提高并发,Java并发工具包中采用了多种优化方式来提高并发容器的执行效率,核心的就是:锁、CAS(无锁)、COW(读写分离)、分段锁。

  • 3、常用同步、并发容器
   
同步容器

Vector

Vector和ArrayList一样实现了List接口,其对于数组的各种操作和ArrayList一样,区别在于Vertor在可能出现线程不安全的所有方法都用synchronized进行了修饰。
 

Stack

Stack是Vertor的子类,Stack实现的是先进后出的栈。在出栈入栈等操作都进行了synchronized修饰。
 

HashTable

HashTable实现了Map接口,它实现的功能HashMap基本一致(HashTable不可存null,而HashMap的键和值都可以存null)。区别在于HashTable使用了synchronized修饰了方法。(与hashMap相比。线程安全)
 

Collections提供的同步集合类

  • List list = Collections.synchronizedList(new ArrayList());
  • Set set = Collections.synchronizedSet(new HashSet());
  • Map map = Collections.synchronizedMap(new HashMap());

其实以上三个容器都是Collections通过代理模式对原本的操作加上了synchronized同步。而synchronized的同步粒度太大,导致在多线程处理的效率很低。所以在JDK1.5的时候推出了并发包下的并发容器,来应对多线程下容器处理效率低的问题。


 

并发容器

CopyOnWriteArrayList

CopyOnWriteArrayList相当于实现了线程安全的ArrayList,它的机制是在对容器有写入操作时,copy出一份副本数组,完成操作后将副本数组引用赋值给容器。底层是通过ReentrantLock来保证同步。但它通过牺牲容器的一致性来换取容器的高并发效率(在copy期间读到的是旧数据)。所以不能在需要强一致性的场景下使用。

 

 

CopyOnWriteArraySet

CopyOnWriteArraySet和CopyOnWriteArrayList原理一样,它是实现了CopyOnWrite机制的Set集合。
 

ConcurrentHashMap

ConcurrentHashMap相当于实现了线程安全的HashMap。其中的key是无序的,并且key和value都不能为null。在JDK8之前,ConcurrentHashMap采用了分段锁机制来提高并发效率,只有在操作同一分段的键值对时才需要加锁。到了JDK8之后,摒弃了锁分段机制,改为利用CAS算法。

 

ConcurrentSkipListMap

ConcurrentSkipListMap相当于实现了线程安全的TreeMap。其中的key是有序的,并且key和value都不能为null。它采用的跳跃表的机制来替代红黑树。为什么不继续使用红黑树呢?因为红黑树在插入或删除节点的时候需要旋转调整,导致需要控制的粒度较大。而跳跃表使用的是链表,利用无锁CAS机制实现高并发线程安全。

 

ConcurrentSkipListSet

ConcurrentSkipListSet和ConcurrentSkipListMap原理一样,它是实现了高并发线程安全的TreeSet。

Queue类型

ArrayBlockingQueue

ArrayBlockingQueue是采用数组实现的有界阻塞线程安全队列。如果向已满的队列继续塞入元素,将导致当前的线程阻塞。如果向空队列获取元素,那么将导致当前线程阻塞。采用ReentrantLock来保证在并发情况下的线程安全。
 

LinkedBlockingQueue

LinkedBlockingQueue是一个基于单向链表的、范围任意的(其实是有界的)、FIFO 阻塞队列。访问与移除操作是在队头进行,添加操作是在队尾进行,并分别使用不同的锁进行保护,只有在可能涉及多个节点的操作才同时对两个锁进行加锁。
 

PriorityBlockingQueue

PriorityBlockingQueue是一个支持优先级的无界阻塞队列。默认情况下元素采用自然顺序升序排列。也可以自定义类实现compareTo()方法来指定元素排序规则,
 

DelayQueue

DelayQueue是一个内部使用优先级队列实现的无界阻塞队列。同时元素节点数据需要等待多久之后才可被访问。取数据队列为空时等待,有数据但延迟时间未到时超时等待。
 

SynchronousQueue

SynchronousQueue没有容量,是一个不存储元素的阻塞队列,会直接将元素交给消费者,必须等队列中的添加元素被消费后才能继续添加新的元素。相当于一条容量为1的传送带。
 

LinkedTransferQueue

LinkedTransferQueue是一个有链表组成的无界传输阻塞队列。它集合了ConcurrentLinkedQueue、SynchronousQueue、LinkedBlockingQueue等优点。具体机制较为复杂。
 

LinkedBlockingDeque

LinkedBlockingDeque是一个由链表结构组成的双向阻塞队列。所谓双向队列指的是可以从队列的两端插入和移出元素。

非阻塞型

ConcurrentLinkedQueue

ConcurrentLinkedQueue是线程安全的无界非阻塞队列,其底层数据结构是使用单向链表实现,入队和出队操作是使用我们经常提到的CAS来保证线程安全。

 

从梯度泄露到数据复原:DLG与iDLG算法实战解析 本文深入解析了DLG与iDLG算法在梯度泄露与数据复原中的实战应用,揭示了联邦学习中的隐私风险。通过详细代码示例和实验数据,展示了如何从梯度中复原原始训练数据,并探讨了梯度压缩、差分隐私等防御措施。文章特别强调了iDLG算法在标签破解中的高效性,为AI安全领域提供了重要参考。 阅读详情

相关推荐

三菱CNC数据采集实战:从环境搭建到代码实现的完整指南

本文提供了一份完整的三菱CNC数据采集实战指南,涵盖从开发环境搭建、核心SDK获取、网络配置到基于C#和A2协议的完整代码实现。文章详细解析了初始化、连接管理、数据获取与展示四大核心模块,并分享了错误处理、性能优化及与MES系统集成的关键技巧,帮助工程师快速构建稳定可靠的工业数据采集系统。

wood5的博客 889

同步容器和并发容器的区别

同步容器:可以简单地理解为通过synchronized来实现同步的容器,如果有多个线程调用同步容器的方法,它们将会串行执行。比如Vector,Hashtable,以及Collections.synchronizedSet,synchronizedList等方法返回的容器。这些类实现线程安全的方式是:将他们的状态封装起来,并对每个公有的方法都进行同步,使得每次只有一个线程能访问容器的状态。 同步容

常敲代码手不生 1749

RealSense D455的标定并运行VINS-FUSION

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

qq_40186909的博客 2万+

java多线程总结-同步容器与并发容器的对比与介绍

目录 1 容器集简单介绍 2 同步容器 3 并发容器 4 案例讲解 4.1 Map/Set 4.2 List 4.3 Queue 4.3.1 ConcurrentLinkedQueue 4.3.2 阻塞队列L...

YP5426的博客 241

ComfyUI 的 LoRA 训练:秋叶 LoRA-scripts 参数设置与测试方法详解

秋叶 LoRA-scripts 的参数设置需结合理论(如模型原理、优化器机制)和硬件条件(显存、算力),新手可先按推荐值起步,再逐步调整。测试时,loss 值帮你判断训练是否正常,XYZ 图表法帮你找到最佳使用参数。掌握这些知识,你就能避开 LoRA 训练的常见坑,从 “盲目调参” 变为 “精准训练”。

2301_78150483的博客 2402

大数据国赛第2套任务C-子任务一特征工程

根据**Hudi**的dwd_ds_hudi库中相关表或MySQL中shtd_store中相关表(order_detail、sku_info),计算出与用户id为6708的用户所购买相同商品种类最多的前10位用户(只考虑他俩购买过多少种相同的商品,不考虑相同的商品买了多少次),将10位用户id进行输出,若与多个用户购买的商品种类相同,则输出结果按照用户id升序排序,输出格式如下,将结果截图粘贴至客户端桌面【Release任务C提交结果.docx】中对应的任务序号下;

weixin_44117248的博客 903

Java:同步容器与并发容器有什么区别?

何为同步容器:可以简单地理解为通过synchronized来实现同步的容器,如果有多个线程调用同步容器的方法,它们将会串行执行。比如Vector,Hashtable,以及Collections.synchronizedSet,synchronizedList等方法返回的容器。 可以通过查看Vector,Hashtable等这些同步容器的实现代码,可以看到这些容器实现线程安全的方式就是将它们的状态封...

zhelong19830726的博客 845

模拟CMOS 第2章 MOS器件物理基础

模拟CMOS 第2章 MOS器件物理基础 文章目录模拟CMOS 第2章 MOS器件物理基础2.1 基本概念2.1.1 MOSEFT开关2.1.2 MOSEFT结构2.1.3 MOS符号2.2 MOS的I/V特性2.2.1 阈值电压2.2.2 I/V特性的推导2.3 二级效应2.4 MOS器件模型2.4.1 MOS器件版图2.4.2 MOS器件电容2.4.3 MOS小信号模型2.4.4 MOS SPICE模型2.4.5 NMOS与PMOS器件的比较2.4.6 长沟道器件与短沟道器件的比较附录A 用作电容器MO

椰子奶糖的博客 5199

Java并发中的同步容器与并发容器,你了解多少?

一、同步容器在Java的集合框架中,主要有四大类别:List、Set、Queue、Map(它们全部都是接口)。Collection和Map是一个顶层接口,而List、Set、Queue则继承了Collection接口,分别代表数组、集合和队列这三大类容器。对于List、Set、Queue、Map来说,它们的实现类有的并不是线程安全的。比如ArrayList、LinkedList、HashMap等容器, 如果有多个线程并发地访问这些容器时,就会出现问题,所以,Java提供了同步容器供用户使用。在Java中,同

m0_71777195的博客 1323

【OpenStack】OpenStack原理(一)——OpenStack发展及架构

OpenStack目前的七个核心组件,分别是计算(Compute)、对象存储(Object Storage)、认证(Identity)、用户界面(Dashboard)、块存储(Block Storage)、网络(Network)和镜像服务(Image Service)。

大数据分析BDA 2万+

【项目实战】主流车载操作系统,QNX实时操作系统入门介绍

QNX是一种实时操作系统,自1980年代初期由Quantum Software Systems成立以来,已被广泛应用于各种行业和领域。QNX具有实时响应、高可靠性和分布式等特点,为各种设备提供了强大的底层操作系统平台。随着科技的不断发展和进步,QNX系统的应用范围和潜力也在不断扩大。本文将全面介绍QNX系统,包括其引言、背景、系统特性、应用领域和生态系统等方面。QNX作为一种实时操作系统,具有高效的实时性能、高可靠性、分布式、可剪裁性和可扩展性等特点。它在各个领域都有广泛的应用,并拥有一个庞大的生态系统。

奶爸的编程之路,也就一周冷个三天 3070

Java多线程并发之同步容器和并发容器-第一篇

Java多线程并发之同步容器和并发容器-第一篇 概述 本文主要讲解在Java多线程并发开发中,集合中有哪些支持并发的的。什么是同步容器(集合),什么是并发容器(集合)?并发容器分类有哪些?每个分类都有哪些类? 本文是《凯哥分享Java并发编程之J.U.C包讲解》系列教程中的第五篇。如果想系统学习,凯哥(kaigejava)建议从第一篇开始看。 从本篇开始,我们就来讲解讲解Java的并发容器。大致思路:先介绍什么是并发容器。然后讲解list相关的、map相关的以及队列相关的。这个系列会有好几篇文章。大

tomfyyds的博客 621

Orange3实战教程:文本挖掘---主题建模

主题建模通过LDA、LSI或HDP算法分析文档集合,自动发现隐含主题结构。组件输入为文档语料库,输出包括带主题权重的语料库、主题词分布及完整主题数据。不同算法特性各异:LSI允许正负权重但解释性较弱,LDA更易解释,HDP参数复杂需谨慎设置。结果可结合词云、热力图等可视化工具分析主题特征及分布。示例显示如何通过预处理文本、选择算法(如提取5个LDA主题),并利用MDS和箱线图探索主题间关系及关键词分布。

err2008的专栏 362

多线程-同步容器和并发容器

同步容器出现的原因?   在Java的集合容器框架中,主要四大类是List、Set、Queue、Map。其中List、Set、Queue分别继承了Collection顶层接口,Map本身是一个顶层接口。我们常用的ArrayList、LinkedList、HashMap这些容器都是非线程安全的,如果有多个线程并发访问这些容器时,就会出现问题。因此,编写程序时,必须要求开发者手动在任何访问...

diaohudou1168的博客 148

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

java 并发容器类实验_Java线程同步类容器和并发容器(四)

同步类容器都是线程安全的,在某些场景下,需要枷锁保护符合操作,最经典ConcurrentModifiicationException,原因是当容器迭代的过程中,被并发的修改了内容。for (Iterator iterator = tickets.iterator(); iterator.hasNext();) {String string = (String) iterator.next();ti...

weixin_35044945的博客 171

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Java并发:线程安全的容器:同步和并发

转载请注明出处:1. 引言多线程环境正确发布共享数据的方法之一就是线程安全容器。线程安全的容器是由锁保护的域,将数据放入线程安全的容器中,可以保障其被安全地发布给所有从这个容器访问它的线程。2. 同步容器类JDK1.0开始有两个很老的同步容器类:Vector和HashTable。JDK1.2之后Collections工具类中添加了一些工厂方法返回类似的同步封装器类:public static C

jiq•钦's technical Blog 4209

假人有限元模型

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

多线程之同步类容器和并发类容器ConcurrentMap,CopyOnWrite讲解

同步类容器 同步类容器都是线程安全的,但是在有时候需要加锁来保护复合操作,比如:迭代(反复访问容器中的元素),跳转(根据指定顺序找到当前元素的下一个),条件运算,有时候并发操作,可能会引起意外。比如ConcurrentModificationException异常(迭代集合元素时候,并发修改)。 同步类容器有:vector HashTable,底层都是采用synchronized进行同步的。 ...

一个人的江湖 483

线程间通信/同步类容器和并发类容器

线程之间通信线程通信的概念:线程是操作系统中独立的个体,但这些个体如果不经过特殊的处理就不能成为一个整体,线程之间的通信就成为整体的必要方式之一。当线程存在通信指挥。系统间的交互性就会更强大,在提高CPU利用率的同时还会使开发人员对线程任务在处理的过程中进行邮箱的把控和监督。使用if/elsepublic class ListAdd1 { private volatile static Lis

zxiang248的专栏 468

java并发和高并发之线程安全——同步容器

一、同步容器 1、同步容器出现原因: 因为ArrayList HashSet HashMap 这几个容器都是线程不安全的,但是使用频率又最为频繁。所以在使用多线程并发地访问这些容器时可能出现线程安全问题。因此要求开发人员在任何用到这些的地方需要做同步处理。如此导致使用时极为不便。对此,java中提供了一些相应的同步容器供使用。 2、常见的同步容器举例: 》ArrayList—...

智欣约的博客 399

Java线程同步类容器和并发容器(四)

同步类容器都是线程安全的,在某些场景下,需要枷锁保护符合操作,最经典ConcurrentModifiicationException,原因是当容器迭代的过程中,被并发的修改了内容。 for (Iterator iterator = tickets.iterator(); iterator.hasNext();) { String string = (String) i...

weixin_30399797的博客 83

java 双向链表_Java多线程并发之同步容器和并发容器-第一篇

Java多线程并发之同步容器和并发容器-第一篇概述本文主要讲解在Java多线程并发开发中,集合中有哪些支持并发的的。什么是同步容器(集合),什么是并发容器(集合)?并发容器分类有哪些?每个分类都有哪些类?本文是《凯哥分享Java并发编程之J.U.C包讲解》系列教程中的第五篇。如果想系统学习,凯哥(kaigejava)建议从第一篇开始看。从本篇开始,我们就来讲解讲解Java的并发容器。大致思路:先介...

weixin_39623716的博客 196

请解释Java中的并发容器类,如ConcurrentHashMap,并讨论其线程安全性的实现原理。在Java中,如何实现高效的线程同步和通信?请列举几种常用的同步机制。

请解释Java中的并发容器类,如ConcurrentHashMap,并讨论其线程安全性的实现原理。Java中的并发容器类是为了在多线程环境下提供高性能的并发操作而设计的。其中,是一个非常重要的并发容器类,它允许在并发环境下高效地更新和检索键值对。下面我将解释的基本概念以及它是如何实现线程安全性的。

weixin_53180424的博客 1505

java 多线程并容器实现,Java学习笔记—多线程(同步容器和并发容器)

简述同步容器与并发容器在Java并发编程中,经常听到同步容器、并发容器之说,那什么是同步容器与并发容器呢?同步容器可以简单地理解为通过synchronized来实现同步的容器,比如Vector、Hashtable以及SynchronizedList等容器,如果有多个线程调用同步容器的方法,它们将会串行执行。可以通过查看Vector、Hashtable等同步容器的实现代码,可以看到这些容器实现线程安...

weixin_39913117的博客 237

每天一例多线程[day13]-----同步类容器和并发类容器

对Vector、ArrayList在迭代的时候如果同时对其进行修改就会抛出java.util.ConcurrentModificationException 如:   package com.jeff.base.coll012;   import java.util.Iterator; import java.util.Vector;   /** ...

qq_36014627的博客 176
上一篇: hashMap总结
下一篇: 乐观锁与悲观锁CAS总结
Longtermevolution
博客等级 码龄9年 113粉丝 249原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值