news 2026/3/11 20:11:21

Java常见技术分享-18-多线程安全-进阶模块-并发集合与线程池

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java常见技术分享-18-多线程安全-进阶模块-并发集合与线程池

基本上 Java中重要的多线程编程重要的类都在java.util.concurrent包里边

并发集合 - ConcurrentHashMap

具体实现
Java7

核心实现: 分段锁(原本是 给整个哈希表加全局锁, 变成了对数组的某一范围进行加锁, 通过缩小锁的范围,让更多的操作可以并行执行,保证线程安全)

Java8

核心实现: CAS加上synchronized

核心流程:

volatile 针对哈希表数组的 每一个元素 对应的 链表头 或者 红黑树 根节点 进行修饰 保证了 可见性。

当线程尝试 去 设置 值的时候,比如put(key , value ) ,根据 key找到对应的下标, 然后在插入的操作前 去内存读取 数组中这个下标 对应的 链表头节点(【该数组索引位的旧头节点的引用】), 接着就会执行CAS操作 , compare比较的是 自己当前感知到的 【该数组索引位的旧头节点的引用】, 把这个当作预期值, 如果预期值一致, 那么把 这个索引位 的值更新成 新节点的引用, 这个新节点 后面理论上就是旧的节点。

如果CAS 操作失败, 说明已经有别的线程已经操作了, 失败就会自旋重试 , 典型乐观锁, 当线程竞争激烈的时候, 就会对 链表头节点对象 加synchronized关键字 ,进行加锁
比如synchronized(node) { 插入删除操作}

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/11 5:08:51

STL专项:stack 栈

本文章是学习过程中记录的笔记,主要来源Erik_Tse stack stack 是栈,一种后进先出(Last In First Out)的容器,它仅维护栈顶(top),支持入栈(push),…

作者头像 李华
网站建设 2026/3/11 22:20:15

STL专项:priority_queue 优先队列(堆)

priority_queue 优先队列,也叫"堆",仅维护最大/最小元素,可以在较小的时间复杂度内获取某个元素集合的最大或最小值 优先队列常用于贪心、优化dp、构造、dijkstra、prim等问题或算法中,应用非常广泛 声明 //默认为大根堆…

作者头像 李华
网站建设 2026/3/11 2:11:22

三维动态避障路径规划:山羊优化算法(Goat Optimization Algorithm, GOA)融合动态窗口法DWA的无人机三维动态避障方法研究,MATLAB代码

针对无人机在三维动态环境下路径规划存在的实时性差、避障精度低、路径平滑性不足等问题,提出一种山羊优化算法(Goat Optimization Algorithm, GOA)混合的路径规划方法。首先,利用山羊优化算法GOA完成全局路径的离线规划&#xff…

作者头像 李华
网站建设 2026/3/11 5:58:28

YOLO在电磁辐射监测的应用:基站设备视觉识别

YOLO在电磁辐射监测的应用:基站设备视觉识别 在城市楼宇之间穿梭的无人机缓缓升空,镜头扫过密布的通信铁塔与屋顶天线阵列。这些看似静默的设备背后,是5G时代高速数据流动的神经末梢,也是公众日益关注的电磁辐射源。如何在成百上千…

作者头像 李华
网站建设 2026/3/12 9:00:36

YOLO模型训练资源使用报表:月度统计与成本分摊

YOLO模型训练资源使用报表:月度统计与成本分摊 在智能制造车间的视觉质检线上,一台搭载YOLOv8的边缘设备正以每秒150帧的速度识别PCB板上的焊点缺陷;与此同时,在企业AI中心的GPU集群中,数十个基于YOLOv10的训练任务正在…

作者头像 李华
网站建设 2026/3/12 1:36:54

Gopher协议:从互联网先驱到SSRF利刃的演进之路

1 概述:互联网的“化石级”协议Gopher协议是互联网早期基于文本的信息查找系统,由美国明尼苏达大学于1991年设计并命名,其名称源自该校“金色地鼠”运动队的俚语缩写。在万维网诞生之前,Gopher曾是互联网上最主要的信息检索工具&a…

作者头像 李华