​集合类是怎么解决高并发中的问题?

简介: 普通的安全的集合类 JUC中高并发的集合类ArrayList、 LinkedList、 HashSet、 TreeSet、 HashMap、 TreeMap 实际开发中我们自己用这样的集合最多,因为一般我们自己写的业务代码中,不太涉及到多线程共享同一个集合的问题。

一、集合类是怎么解决高并发中的问题?

普通的安全的集合类

JUC中高并发的集合类

ArrayList LinkedList HashSet TreeSet HashMapTreeMap实际开发中我们自己用这样的集合最多,因为一般我们自己写的业务代码中,不太涉及到多线程共享同一个集合的问题

线程安全的集合类VectorHashTable 虽然效率没有JUC中的高性能集合高,但是也能够适应大部分环境

高性能线程安全的集合类

·  1.ConcurrentHashMap

·  2.ConcurrentHashMap和HashTable的区别

·  3.ConcurrentHashMap线程安全的具体实现方式/底层具体实现

·  4.说说CopyOnWriteArrayList

1.ConcurrentHashMap

java5.0在juc包中提供了大量支持并发的容器类,采用“锁分段”机制,Concurrentlevel分段级别,默认16,就是有16个段(segment),每个段默认又有16个哈希表(table),每个又有链表连着。

640.png


在JDK1.7的时候,ConcurrentHashMap(分段锁) 对整个桶数组进行了分割分段(Segment),每一把锁只锁容器其中一部分数据,多线程访问容器里不同数据段的数据,就不会存在锁竞争。DK1.8的时候ConcurrentHashMap取消了Segment分段锁,采用CAS和synchronized来保证并发安全。数据结构跟HashMap1.8的结构类似,数组+链表/红黑二叉树。Java 8在链表长度超过一定阈值(8)时将链表(寻址时间复杂度为O(N))转换为红黑树(寻址时间复杂度为O(log(N)))synchronized只锁定当前链表或红黑二叉树的首节点,这样只要hash不冲突,就不会产生并发,效率又提升N倍。

ConcurrentSkipListMap线程安全有序的哈希表(相当于线程安全的TreeMap); 它继承于AbstractMap类,并且实现ConcurrentNavigableMap接口。ConcurrentSkipListMap是通过“跳表”来实现的

ConcurrentSkipListSet线程安全的有序的集合(相当于线程安全的TreeSet)它继承于AbstractSet,并实现了NavigableSet接口ConcurrentSkipListSet是通过ConcurrentSkipListMap实现的,它也支持并发CopyOnWriteArraySet addIfAbsent和 CopyOnWriteArrayList(写入并复制)也是juc里面的,它解决了并发修改异常,每当有写入的时候,就在底层重新复制一个新容器写入,最后把新容器的引用地址赋给旧的容器,在别人写入的时候,其他线程读数据,依然是旧容器的线程。这样是开销很大的,所以不适合频繁写入的操作。适合并发迭代操作多的场景只能保证数据的最终一致性




目录
相关文章
Springboot项目启动的三种方式
Springboot项目启动的三种方式
1225 0
|
负载均衡 Ubuntu 应用服务中间件
|
10月前
|
JSON Java 数据库连接
|
9月前
|
消息中间件 NoSQL Java
SpringBoot框架常见的starter你都用过哪些 ?
本节介绍常见的Spring Boot Starter,分为官方(如Web、AOP、Redis等)与第三方(如MyBatis、MyBatis Plus)两类,用于快速集成Web开发、数据库、消息队列等功能。
485 0
|
存储 NoSQL Java
【数据结构进阶】哈希表
哈希表是一种高效的数据结构,通过哈希函数实现数据映射,支持平均O(1)时间复杂度的查找、插入和删除操作。本文详细介绍了哈希表的基本概念、哈希函数的设计(如直接定址法和除留余数法)以及哈希冲突的解决方法(如开放定址法和链地址法)。同时,文章通过代码实例展示了线性探测和链地址法两种哈希表的实现过程,并分析了各自的优缺点。最后总结指出,合理选择哈希函数和冲突解决策略是优化哈希表性能的关键。
1267 2
|
11月前
|
测试技术 UED
全新开源通义千问Qwen3,它来了!
Qwen3是通义千问系列的最新模型,融合推理与非推理模式,兼具QwQ和Instruct模型能力。提供多种尺寸,包括235B-A22B、30B-A3B及六个Dense模型,大幅提升数学、代码、逻辑推理和对话能力,达到业界领先水平。旗舰模型Qwen3-235B-A22B在多场景测试中表现优异,小型模型如Qwen3-4B性能媲美大模型。用户可在阿里云百炼平台免费体验各100万Token。
10032 4
全新开源通义千问Qwen3,它来了!
|
存储 安全 容器
【多线程面试题二十一】、 分段锁是怎么实现的?
这篇文章解释了分段锁的概念和实现方式,通过将数据分成多个段并在每段数据上使用独立锁,从而降低锁竞争,提高并发访问效率,举例说明了`ConcurrentHashMap`如何使用分段锁技术来实现高并发和线程安全。
【多线程面试题二十一】、 分段锁是怎么实现的?
|
机器学习/深度学习 缓存
RNN又行了!DeepMind新发布的Griffin可以与同级别的LLM性能相当
Hawk和Griffin是DeepMind推出的新型循环神经网络(RNNs),2月刚刚发布在arxiv上。Hawk通过使用门控线性递归(gated linear recurrences)超越了Mamba的性能,而Griffin则是一种混合型模型,结合了门控线性递归和局部注意力(local attention),与Llama-2的性能相当,但使用的训练数据明显较少。Griffin在处理比训练时更长的序列时表现出色。这两种模型在硬件效率方面与Transformer相当,但在推理过程中具有更低的延迟和更高的吞吐量。Griffin的规模已扩展到了140亿个(14B)参数。
656 3

热门文章

最新文章