synchronized锁升级详细过程

news2024/11/18 5:53:39

 

目录

一、锁升级基础

1)偏向锁

2)轻量级锁(自旋锁)

3)重量级锁

二、为什么要有锁升级过程?

1)减少无竞争情况下的同步操作开销

2)尽量避免线程切换的开销

3)降低内存消耗

4)提高系统吞吐量

三、锁升级具体过程

一、锁升级基础

1)偏向锁

        只有一个线程争抢锁资源的时候.将线程拥有者标识为当前线程。引入了偏向锁目的是来尽可能减少无竞争情况下的同步操作开销。当一个线程访问同步块并获取对象的锁时,会将锁的标记记录在线程的栈帧中,并将对象头中的Thread ID设置为当前线程的ID。此后,当这个线程再次请求相同对象的锁时,虚拟机会使用已经记录的锁标记,而不需要再次进入同步块。

2)轻量级锁(自旋锁)

        一个或多个线程通过CAS去争抢锁,如果抢不到则一直自旋。虚拟机会将对象的Mark Word复制到线程的栈帧中作为锁记录,并尝试使用CAS(Compare and Set)操作尝试获取锁。如果CAS成功,则表示线程获取了轻量级锁,并继续执行同步块。如果CAS失败,说明有竞争,虚拟机会通过自旋(spinning)等待其他线程释放锁

3)重量级锁

如果自旋等待不成功,虚拟机会将轻量级锁升级为重量级锁。在这种状态下,虚拟机会将线程阻塞,并使用操作系统的互斥量来实现锁的释放和获取。

需要注意的是,锁的升级是逐级升级的过程,而不会存在降级。换句话说,一旦锁升级到更高级别,就不会再回到低级别。

二、为什么要有锁升级过程?

        锁的升级过程是为了提供更好的性能和吞吐量,并减少多线程竞争产生的开销。下面是锁的升级过程的一些原因:

1)减少无竞争情况下的同步操作开销

        在多线程环境下,如果没有竞争,每个线程都可以安全地访问共享资源,无需进行同步操作。锁的升级过程中的第一阶段偏向锁(Biased Locking)就是为了在无竞争的情况下减少同步操作的开销。它通过记录线程ID来避免对锁的加锁和解锁操作,提高了单线程访问同步代码块时的性能

2)尽量避免线程切换的开销

        锁的升级过程中的第二阶段轻量级锁(Lightweight Locking)是为了减少线程切换的开销。它使用CAS(Compare and Set)操作来尝试获取锁,如果成功则可以继续执行同步块,无需线程切换;如果失败,则会进行自旋操作等待锁的释放。自旋操作避免了线程挂起和切换的开销,提高了多线程竞争时的性能。

3)降低内存消耗

        锁的升级过程中的第二阶段轻量级锁使用对象头中的一部分位来存储线程ID和锁标记,不需要额外的内存存储锁的状态。相对于传统的重量级锁,它能够节省内存消耗。

4)提高系统吞吐量

        锁的升级过程可以使多个线程在无竞争情况下快速获取锁,避免了线程阻塞和等待的开销。这样,系统的吞吐量会更高,因为更多的线程可以并发地执行任务。

总而言之,锁的升级过程是为了提高多线程环境下的性能和吞吐量,减少同步操作的开销,并尽量避免线程切换的开销。Java虚拟机根据线程竞争的情况和锁的使用情况自动进行锁的升级和降级,以优化多线程程序的性能。

三、锁升级具体过程

1)当只有一个线程去争抢锁的时候,会先使用偏向锁,就是给一个标识,说明现在这个锁被线程a占有.
2)后来又来了线程b,线程c,说凭什么你占有锁,需要公平的竞争,于是将标识去掉,也就是撤销偏向锁,升级为轻量级锁,三个线程通过CAS自旋进行锁的争抢(其实这个抢锁过程还是偏向于原来的持有偏向锁的线程).
3)现在线程a占有了锁,线程b,线程c一直在循环尝试获取锁,后来又来了十个线程,一直在自旋,那这样等着也是干耗费CPU资源,所以就将锁升级为重量级锁,向内核申请资源,直接将等待的线程进行阻塞.

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL 数据库

文章目录 数据库的基本概念数据表数据库数据库管理系统数据库系统 数据库的发展史当今主流数据库介绍SQL Server (微软公司产品)Oracle (甲骨文公司产品)DB2 (IBM公司产品)MySQL (甲骨文公司收购…

语法篇·Servlet基础

一、初识Servlet 1.1简介 Servlet是一种使用Java语言来开发动态网站的技术。Servlet是运行在Web服务器或应用服务器上的程序,它是作为来自Web浏览器或其他HTTP客户端的请求和HTTP服务器上的数据库或应用程序之间的中间层。Servlet可以收集来自网页表单的用户输入&a…

上位机与两台PLC之间无线以太网通信

本文以组态王和2台三菱FX5u PLC为例,介绍组态王与多台 PLC的无线以太网通信实现过程。在本方案中采用了三菱PLC无线通讯终端DTD419MB,作为实现无线通讯的硬件设备。 在这一无线以太网通讯系统的搭建中,用户无需更改网络参数和原有程序&#…

Java版本的工程项目管理系统源代码之工程项目管理系统面临的挑战 spring cloud +支持二开

管理方式 项目管理服务(PM) 是指工程项目管理企业按照合同约定,在工程项目决策阶段,为业主编制可行性研究报告,进行可行性分析和项目策划;在工程项目实施阶段,为业主提供招标代理、设计管理、采…

为什么个人项目我更推荐使用Caddy?

为什么个人项目我更推荐使用Caddy? 为什么个人项目我更推荐使用Caddy? 前言什么是Caddy?Caddy是够用且省心的简单的配置自动化 https结尾参考链接 前言 最近我把自己一些项目里面的 nginx 换成了 caddy,运转相当良好,比较开心,所以写了…

java 会员中心管理系统Myeclipse开发mysql数据库web结构jsp编程计算机网页项目

一、源码特点 JSP 会员中心管理系统 是一套完善的系统源码,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,以及相应配套的设计文档,系统主要采用B/S模式开发。 研究的基本内容是基于Web的会员中心管理系…

印刷企业使用MES生产管理系统后,会出现哪些弊端

MES生产管理系统是一种用于企业管理、控制和优化生产过程的管理软件。在印刷企业中,印刷MES管理系统可以帮助企业更好地管理生产过程,提高生产效率和质量。但是,在使用印刷MES管理系统时,也会存在一些弊端。本文将探讨这些弊端&am…

java版本Spring Cloud + Spring Boot +二次开发+企业电子招标采购系统源码

一、立项管理 1、招标立项申请 功能点:招标类项目立项申请入口,用户可以保存为草稿,提交。 2、非招标立项申请 功能点:非招标立项申请入口、用户可以保存为草稿、提交。 3、采购立项列表 功能点:对草稿进行编辑&#x…

基于轻量级yolov5s开发构建车道线实例分割检测识别系统

车道线实例分割检测是指利用计算机视觉技术对图像或视频中的车道线进行精确的识别和定位任务。该任务旨在区分和标记出每条独立的车道线,并提供它们的准确位置和形状信息。 实例分割是目标检测和语义分割的结合,不仅要找到目标的边界框,还需…

【AUTOSAR】AUTOSAR开发工具链(六)----MIL测试操作说明

1.1. 目的 - Objective 根据 ISO 26262 及本公司对基于模型开发时软件的测试要求, 为了使测试人员更加方便快捷地开始进行 MIL 测试,特编写并发布此规范。 2. MIL 测试流程概况 一、确保输入资料的齐全 二、制作测试案例, 并通过审查 三、制作…

最新导则下生态环评报告编制技术暨报告篇、制图篇、指数篇、综合应用篇教程

详情点击链接:最新导则下生态环评报告编制技术暨报告篇、制图篇、指数篇、综合应用篇 一,生态环评报告编制规范 结合生态环境影响评价最新导则,详述不同类型项目生态环评报告编制要求与规范 二,土地利用图 1、土地利用分类体系…

维也纳酒店资深投资人尹鹏伟:陪伴是最长情的告白!

今年以来,经济复苏不断加快,酒店行业迎来井喷式爆发。作为中国中端酒店“开山之作”,在中端酒店风起云涌,内卷加剧,竞争激烈的当下,维也纳酒店却能在全国287个大中小城市在营门店超1300家,在中端…

【AUTOSAR】AUTOSAR开发工具链(七)----HIL测试操作说明(1)

1. HIL 设备操作 本操作说明适用硬件 dSPACE 1006 ,软件 dSPACE ControlDesk 3.7.4。 1.1. 硬件操作流程 打开电脑主机 插入 licence 打开 dSPACE 电源开关。 1.2. 软件操作流程 1.2.1. 模型导入与运行 点击 dSPACE ControlDesk 3.7.4 图标进入操作界面。 进入操作…

网页也能裸眼3D?只需一个电脑摄像头就能完成

和2D显示屏、手机屏幕相比,VR图像为什么看起来更加沉浸、立体呢?一方面是透镜将左右眼图像结合,形成3D视觉效果,而另一方面则归功于屏幕画面与头部追踪的同步作用。 简单来讲,就是VR会根据用户头部的位置和朝向来改变…

高工奖项|如何破解智能汽车「缺芯少魂」?破冰者已经出现

对于智能驾驶赛道来说,2023年将是至关重要的一年。芯片短缺影响正在逐步得到缓解,但车市不确定性正在加剧,同时,车企在智能化普及上的成本压力也在凸显。 高工智能汽车研究院监测数据显示,2022年度中国市场&#xff08…

JS--一

三目运算 :用于赋值 switch case return 遍历数组: 一般不用for...in 遍历数组,是因为 for...in 遍历的数组下标,是 字符串形 而是用for...in 遍历 对象 时间监听--addEventListener 时间类型 一定加引号!&#xf…

[Web程序设计]实验: 请求与响应

一、实验目的 (1)掌握浏览器请求时数据的传递和获取。 (2)掌握服务端响应时数据的传递及获取。 二、实验内容 (1)编写一个类,该类能够实现在访问完Servlet后,还能在浏览器地址栏…

OSPF快速收敛之FRR

一、实验 OSPF IP FRR(Fast ReRoute,快速重路由) OSPF IP FRR是动态IP FRR,利用LFA(Loop-Free Alternates)算法预先计算出备份路径,保存在转发表中,以备在故障时将流量快速切换到备…

编码规范之命名规范

前言: \textcolor{Green}{前言:} 前言: 💞这个专栏就专门来记录一下寒假参加的第五期字节跳动训练营 💞从这个专栏里面可以迅速获得Go的知识 今天的笔记是昨天的补充,对编码规范中的命名规范进行总结。主要…

管理类联考——逻辑——知识篇——形式逻辑——六、假言——haimian

假言 考点分析 假言 年度 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023题量106312461345 定义分类 假言命题是断定一全事物情况的存在是另一个事物情况存在的条件的命题,又称条件命题。假言命题可以分为三类:充分条件假言命题、必要…