synchronized锁机制升级过程——面试题

1. 无锁状态

  • 对象在没有被任何线程锁定时处于无锁状态。此时对象头中的锁标志位通常表示为无锁(例如,标记字段的特定位组合表示无锁或偏向锁状态)。

2. 偏向锁(Biased Locking)

  • 初次获取:当线程首次获得对象锁时,如果对象处于无锁状态,系统会将其升级为偏向锁。此时会在对象头的 MarkWord 中记录当前线程的 ID,表明该锁偏向于这个线程。后续该线程再次请求该锁时,只需验证 MarkWord 中的线程 ID 是否与当前线程 ID 相符,相符则无需进一步同步操作即可直接获取锁。
  • 撤销与偏向撤销:当有第二个线程尝试获取该偏向锁时,偏向锁将被撤销,恢复到无锁状态。随后,锁会根据竞争情况升级为轻量级锁或重量级锁。此外,为了应对程序运行过程中线程生命周期较短、偏向锁失效的情况,JVM 还会定期或在特定条件下进行全局偏向锁撤销操作。

3. 轻量级锁(Lightweight Locking)

  • 获取:当线程 A 在偏向锁撤销后尝试获取锁时,如果发现锁已被偏向线程 B 持有,线程 A 将尝试使用 CAS(Compare-and-Swap)操作将对象头的 MarkWord 替换为指向线程 A 线程栈中锁记录(Lock Record)的指针,并将锁记录中的指针回写到 MarkWord。如果 CAS 成功,线程 A 获得锁,否则说明有其他线程(可能是线程 B 或其他新竞争者)也在尝试获取锁,此时进入下一步。
  • 自旋与升级:若 CAS 失败,线程 A 会进入自旋状态,循环尝试获取锁。如果在一定次数(默认通常是10次)的自旋后仍未能获得锁,轻量级锁将升级为重量级锁。升级过程包括:线程 A 首先暂停自旋,然后在对象头中设置标志,触发锁膨胀,将锁变为重量级锁。同时,线程 A 会被挂起,加入到锁对象对应的 Monitor(重量级锁)的等待队列中。

4. 重量级锁(Heavyweight Locking)

  • 获取:一旦锁升级为重量级锁,所有后续尝试获取锁的线程都会被阻塞,放入操作系统层面的等待队列中,由操作系统进行线程调度和上下文切换。
  • 释放:持有锁的线程执行完同步代码块后,释放锁。操作系统会唤醒等待队列中的一个(或多个,取决于锁策略)线程,使其重新尝试获取锁。

无锁、偏向锁、轻量锁属于用户态(jvm),重量锁属于内核态(系统)

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

谷粒商城实战(011 业务-检索服务)

Java项目《谷粒商城》架构师级Java项目实战,对标阿里P6-P7,全网最强 总时长 104:45:00 共408P 此文章包含第173p-第p194的内容 介绍 这些过滤条件都可以写在must里,但是filter不参与评分,速度会快一些,所以一些分类等…

【三十六】【算法分析与设计】综合练习(3),39. 组合总和,784. 字母大小写全排列,526. 优美的排列

目录 39. 组合总和 对每一个位置进行枚举 枚举每一个数出现的次数 784. 字母大小写全排列 526. 优美的排列 结尾 39. 组合总和 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不…

探索Python爬虫:解析网页数据的神奇之旅

在当今数字化时代,信息的获取变得比以往任何时候都更加便捷。然而,即使在互联网上,获取数据也需要通过正确的工具和技术。Python爬虫就是这样一种强大的工具,它可以让我们轻松地从互联网上收集数据,并将其转化为有用的…

学习人工智能:为何PyTorch深度学习框架不可或缺

在人工智能(AI)的浩瀚领域中,深度学习作为其核心分支,正以其强大的数据处理能力、模式识别能力和预测能力引领着科技的飞速发展。而在深度学习的众多工具与框架中,PyTorch无疑是一颗璀璨的明星。本文将从PyTorch的特点…

机器视觉学习(十二)—— 绘制图形

目录 一、绘制函数参数说明 1.1 cv2.line()绘制直线 1.2 cv2.rectangle()绘制矩形 1.3 cv2.circle() 绘制圆形 1.4 cv2.ellipse()绘制椭圆 1.5 cv2.polylines()绘制…

由elemnent-ui模拟一个全选、反选效果想到的购物车逻辑案例

本文参考 https://blog.csdn.net/sumimg/article/details/137508302?csdn_share_tail%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22137508302%22%2C%22source%22%3A%22sumimg%22%7D 我遇到的问题 点击店铺二级的时候,checkedCiti…

wordpress子比主题打开文章详情页一直出现在首页的问题

遇到过几次这种情况了,不知是不是中了木马,无从下手,试了很多方法都不行快要疯了,之前试过解决不了只能重新安装,现在又出现了,第二次了,太麻烦了,突然无意中打开index.php文件发现被…

【频繁模式挖掘】FP-Tree算法(附Python实现)

一、实验内容简介 该实验主要使用频繁模式和关联规则进行数据挖掘,在已经使用过Apriori算法挖掘频繁模式后,这次使用FP-tree算法来编写和设计程序,依然使用不同规模的数据集来检验效果,最后分析和探讨实验结果,看其是…

AttributeError: module ‘cv2‘ has no attribute ‘xfeatures2d‘

新版本的cv2已经不支持这种写法 cv2.xfeatures2d.SIFT_create() 因为这个SIFT特征匹配算法已经专利授权,在开源的CV2中无法使用,当然新版本的cv2也有能够直接使用的SIFT函数 直接使用cv2.SIFT_create()

echarts实现饼图见渐变

数据中添加itemStyle,修改颜色为渐变色 option {tooltip: {show:false,trigger: item},legend: {top: 5%,left: center},series: [{name: Access From,type: pie,radius: [40%, 70%],avoidLabelOverlap: false,label: {show: false,position: center,color: red},emphasis: {…

酷开科技 |酷开系统全视频化升级,让电视回归视频属性

随着消费升级浪潮的兴起,家庭互联网这一概念也在资本的注入下,成为了新风口。酷开系统全视频化升级,让电视回归视频属性,酷开系统在之前瀑布流板块设计的基础上,增加了视频流图文融合的并行界面,同时酷开系…

七、Ajax(Django开发)

Ajax(Django开发) 知识点的回顾:1.Ajax请求2.订单小结3.图表4.关于文件上传4.1基本操作案例:批量上传数据案例:混合数据(Form)4.2启用media案例:混合数据(form&#xff0…

探索 Java 网络爬虫:Jsoup、HtmlUnit 与 WebMagic 的比较分析

1、引言 在当今信息爆炸的时代,网络数据的获取和处理变得至关重要。对于 Java 开发者而言,掌握高效的网页抓取技术是提升数据处理能力的关键。本文将深入探讨三款广受欢迎的 Java 网页抓取工具:Jsoup、HtmlUnit 和 WebMagic,分析…

Jackson 各种注解使用示例

参考资料 Jackson使い方メモ 目录 一. JsonIgnore二. JsonIgnoreProperties三. JsonProperty3.1 作用于entity属性上,指定json对象属性名3.2 作用于entity方法上,指定json对象属性名 四. JsonFormat4.1 日期格式化4.2 数字格式化4.3 枚举类返回code 五.…

Cortex-M4架构

第一章 嵌入式系统概论 1.1 嵌入式系统概念 用于控制、监视或者辅助操作机器和设备的装置,是一种专用计算机系统。 更宽泛的定义:是在产品内部,具有特定功能的计算机系统。 1.2 嵌入式系统组成 硬件 ①处理器:CPU ②存储器…

JSBridge原理 - 前端H5与客户端Native交互

1. 概述: 在混合应用开发中,一种常见且成熟的技术方案是将原生应用与 WebView 结合,使得复杂的业务逻辑可以通过网页技术实现。实现这种类型的混合应用时,就需要解决H5与Native之间的双向通信。JSBridge 是一种在混合应用中实现 …

【r-tree算法】一篇文章讲透~

目录 一、引言 二、R-tree算法的基本原理 1 数据结构 2 插入操作 3 删除操作 4 查询操作 5 代码事例 三、R-tree算法的性能分析 1 时间复杂度 2 空间复杂度 3 影响因素 四、R-tree算法的变体和改进 1 R*-tree算法 2 X-tree算法 3 QR-tree算法 五、R-tree算法的…

前端| 富文本显示不全的解决方法

背景 前置条件:编辑器wangEditor vue项目 在pc端进行了富文本操作, 将word内容复制到编辑器中, 进行发布, pc端正常, 在手机端展示的时候 显示不全 分析 根据h5端编辑器内容的数据展示, 看到有一些样式造…

【任推邦新悟空网盘拉新】八款地推网推新项目,周期稳定,受众广!

现在地推网推新项目打得火热,尤其是夸克网盘,地推网推新流程其实很简单,简单来说就是就是给项目增加新用户,每邀请一个新用户注册,你就能得到收益,下面小推给大家整理了一份好推的项目,希望能够…

C++:类与对象(一)

hello,各位小伙伴,本篇文章跟大家一起学习《C:类与对象(一)》,感谢大家对我上一篇的支持,如有什么问题,还请多多指教 ! 文章目录 面向对象和面向过程的区别1.类的引入2.…