线程安全集合类

文章目录

  • 1. ConcurrentHashMap
  • 2. LinkedBlockingQueue 阻塞队列
  • 3. ConcurrentLinkedQueue
  • 4. CopyOnWriteArrayList

在这里插入图片描述
JDK1.7 hashmap采用数组加链表头插的方式,在扩容时会出现循环死链问题,A->B->C扩容后C->B->A AB BA出现循环死链。

1. ConcurrentHashMap

HashTable是线程安全的,但是HashTable只是单纯的方法层面上加上synchronized。虽然安全,锁粒度太大了,所以性能不好。
口述ConcurrentHashMap并非锁住整个方法,像HashTable它直接在方法层面上加锁,粒度太大,ConcurrentHashMap它只锁了节点锁了一个链,而不是对整个table锁住,比如说put方法,它只是在要插入时才会加锁,吧插入的这个链表锁住,那table初始化啊、以及如果说当前位置没有元素时它会以CAS方式将节点插入,这些都没有锁,只有在插入时而且这个位置还有节点时才会加锁,粒度更小,并发性更高。而且get方法的话根本就没有加锁,也不是像HashTable那样吧方法上都加个synchronized,ConcurrentHashMap的get方法的话因为有volatile修饰table,也就保证了每次获取到的值都是最新的,也就不需要加锁。

2. LinkedBlockingQueue 阻塞队列

两把锁分别锁队头和队尾,其实就是保证消费者和生产者可以同步拿到对应的锁,你放你的我拿我的。多个消费者的话只有一个能拿到锁进行消费。

3. ConcurrentLinkedQueue

ConcurrentLinkedQueue 的设计与 LinkedBlockingQueue 非常像:

  • 两把【锁】,同一时刻,可以允许两个线程同时(一个生产者与一个消费者)执行
  • dummy 节点的引入让两把【锁】将来锁住的是不同对象,避免竞争
  • 只是这【锁】使用了cas 来实现

例如之前讲的 Tomcat 的 Connector 结构时,Acceptor 作为生产者向 Poller 消费者传递事件信息时,正是采用了ConcurrentLinkedQueue 将 SocketChannel 给Poller使用
在这里插入图片描述

4. CopyOnWriteArrayList

写入时拷贝的思想,增删改操作会将底层数组拷贝一份,更改操作在新数组上执行,这时不影响其它线程的并发读,读-写并发,但可能读到的旧数据,有问题。

回顾:读写锁只是读读并发

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/277140.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

超越MJ:PixArt-α超低成本,高质量文生图创新模型

近年来,人工智能的发展使得文本到图像(T2I)技术日益成熟,但同时也伴随着高昂的训练成本。然而,华为诺亚方舟实验室等机构最近提出的PixArt-α模型,打破了这一局限。PixArt-α能够以极低的成本(仅…

dp入门:从记忆化搜索到递推 灵神[基础算法精讲17]

198. 打家劫舍 链接 : 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 解决 : 1.记忆化搜索(自顶向下) ; class Solution { public:int rob(vector<int>& nums) {// 记忆化搜索int n nums.size();vector<int> memo(n,-1); //…

Python - 网络传输数据格式【字节流】传输优点及数据格式【字符,字典,字节,二进制,十六进制】的转换

一. 前言 在网络传输数据时&#xff0c;数据本质上是以二进制形式进行传输的。无论是传输字节还是传输二进制数据&#xff0c;最终都会转化为二进制进行传输。 所以&#xff0c;从传输速度的角度来看&#xff0c;无论是传输字节还是传输二进制数据&#xff0c;实际上是相同的…

光学镜头市场研究:预计2029年将达到460亿元

随着终端产品应用领域的不断拓宽和深化&#xff0c;未来光学镜头设计和生产技术的重点是提高成像质量、增加功能并缩小体积。具体而言&#xff0c;光学镜头产品技术在不同的应用领域正呈现出不同的特点。如在数字安防领域&#xff0c;随着视频监控技术应用范围和场景的逐步扩展…

Python自动化测试(unittest框架)

一、什么是框架 框架是由大佬开发或者专业的研发团队研发的技术骨架&#xff0c;框架是一个半成品&#xff0c;框架是对常用的功能&#xff0c;基础的代码进行封装的一个工具&#xff0c;这个工具对外提供了一些API&#xff0c;其他的开发者只需要调用框架的接口即可&#xff…

聚焦生成式AI,从基石到平台到应用,亚马逊云科技火力全开

引言&#xff1a;在迈向生成式AI的道路上&#xff0c; 云厂商的行业声音越来越大…… 【全球云观察 &#xff5c; 科技热点关注】 2023年全球科技行业最火的莫过于生成式AI&#xff0c;即Artificial Intelligence Generated Content。在迈向生成式AI的道路上&#xff0c;虽然…

【加锁 】

文章目录 锁 理论部分锁的原理锁的应用 --- 封装 锁 理论部分 定义锁的两种方案 1.定义全局锁 直接在全局用 pthread_mutex_t mutex PTHREAD_MUTEX_INITIALIZER; 就不用再 init 和 destroy 了。 2.定义局部锁 pthread_mutex_init pthread_mutex_t 是库提供的一种数据类型 第二…

Docker 学习不再难:这些网站让你轻松掌握容器技术!

介绍&#xff1a;Docker是一个开源的应用容器引擎&#xff0c;基于Go语言并遵从Apache2.0协议开源。它可以让开发者将他们的应用及依赖打包到一个轻量级、可移植的容器中&#xff0c;进而发布到任何流行的Linux或Windows操作系统的机器上&#xff0c;同时也可以实现虚拟化。 Do…

certum ev ssl证书1180元一年,360浏览器显示公司名

Certum旗下的EV SSL证书是审核最严的数字证书&#xff0c;不仅对网站传输数据进行加密&#xff0c;还可以对网站身份进行验证&#xff0c;除此之外&#xff0c;它独有的绿色地址栏提升了网站的真实性&#xff0c;增强了客户对网站的信任感。今天就随SSL盾小编了解Certum旗下的E…

中国制造MES市场分析

据了解&#xff0c;作为制造业企业数字化转型的核心&#xff0c;制造执行系统是打通IT和OT&#xff0c;将运营和生产数据融合的关键通道。在工业元宇宙、数字孪生、智能制造、工业4.0、CPS等概念之下&#xff0c;MES在务实的制造业中需求明确、价值清晰&#xff0c;是制造业企业…

关东升老师从小白到大牛系列丛书(由清华大学出版社出版)

助力技术成长&#xff0c;成就大牛之路 在这个科技日新月异的时代&#xff0c;掌握一门编程语言或专业技能已是必备&#xff0c;不再是奢侈。清华大学出版社出版的“从小白到大牛”的系列丛书&#xff0c;涵盖Python、Java、Kotlin、Android和SQL&#xff0c;助你快速在技术之…

前端自定义icon的方法(Vue项目)

第一步&#xff1a;进入在线的编辑器进行设计 好用&#xff1a;百度字体编辑器 比如先导入有个ttf文件 添加新字体 双击每个模块进入编辑区域 更改相应的信息&#xff0c;比如name 编辑完了进行导出文件(各种格式就行了)就行了 第二步&#xff1a;在项目中asset文件储存这些文…