java中偏向锁和轻量级锁有什么区别

区别是:Java偏向锁是Java6引入的一项多线程优化。如果在运行过程中,同步锁只有一个线程访问,则线程是不需要触发同步的。轻量级锁是由偏向所升级来的,偏向锁运行在一个线程进入同步块的情况下,当第二个线程加入锁争用的时候,偏向锁就会升级为轻量级锁。

java中偏向锁和轻量级锁有什么区别-Worktile社区

偏向锁

Java偏向锁(Biased Locking)是Java6引入的一项多线程优化。偏向锁,顾名思义,它会偏向于名列前茅个访问锁的线程,如果在运行过程中,同步锁只有一个线程访问,不存在多线程争用的情况,则线程是不需要触发同步的,这种情况下,就会给线程加一个偏向锁。

如果在运行过程中,遇到了其他线程抢占锁,则持有偏向锁的线程会被挂起,JVM会消除它身上的偏向锁,将锁恢复到标准的轻量级锁。

偏向锁获取过程:

访问Mark Word中偏向锁的标识是否设置成1,锁标志位是否为01,确认为可偏向状态。

如果为可偏向状态,则测试线程ID是否指向当前线程,如果是,进入步骤5,否则进入步骤3。

如果线程ID并未指向当前线程,则通过CAS操作竞争锁。如果竞争成功,则将Mark Word中线程ID设置为当前线程ID,然后执行5;如果竞争失败,执行4。

如果CAS获取偏向锁失败,则表示有竞争。当到达全局安全点(safepoint)时获得偏向锁的线程被挂起,偏向锁升级为轻量级锁,然后被阻塞在安全点的线程继续往下执行同步代码。(撤销偏向锁的时候会导致s较好 the word)

执行同步代码。

轻量级锁

轻量级锁是由偏向所升级来的,偏向锁运行在一个线程进入同步块的情况下,当第二个线程加入锁争用的时候,偏向锁就会升级为轻量级锁。

轻量级锁的加锁过程:

在代码进入同步块的时候,如果同步对象锁状态为无锁状态(锁标志位为“01”状态,是否为偏向锁为“0”),虚拟机首先将在当前线程的栈帧中建立一个名为锁记录(Lock Record)的空间,用于存储锁对象目前的Mark Word的拷贝,官方称之为 Displaced Mark Word。

拷贝对象头中的Mark Word复制到锁记录中;

拷贝成功后,虚拟机将使用CAS操作尝试将对象的Mark Word更新为指向Lock Record的指针,并将Lock record里的owner指针指向object mark word。如果更新成功,则执行步骤4,否则执行步骤5。

如果这个更新动作成功了,那么这个线程就拥有了该对象的锁,并且对象Mark Word的锁标志位设置为“00”,即表示此对象处于轻量级锁定状态。

如果这个更新操作失败了,虚拟机首先会检查对象的Mark Word是否指向当前线程的栈帧,如果是就说明当前线程已经拥有了这个对象的锁,那就可以直接进入同步块继续执行。否则说明多个线程竞争锁,轻量级锁就要膨胀为重量级锁,锁标志的状态值变为“10”,Mark Word中存储的就是指向重量级锁(互斥量)的指针,后面等待锁的线程也要进入阻塞状态。 而当前线程便尝试使用自旋来获取锁,自旋就是为了不让线程阻塞,而采用循环去获取锁的过程。

延伸阅读:

什么是Java?

Java具有大部分编程语言所共有的一些特征,被特意设计用于互联网的分布式环境。Java具有类似于C++语言的形式和感觉,但它要比C++语言更易于使用,而且在编程时彻底采用了一种以对象为导向的方式。

Java是一种编程语言,被特意设计用于互联网的分布式环境。Java具有类似于C++语言的“形式和感觉”,但它要比C++语言更易于使用,而且在编程时彻底采用了一种“以对象为导向”的方式。

使用Java编写的应用程序,既可以在一台单独的电脑上运行,也可以被分布在一个网络的服务器端和客户端运行。另外,Java还可以被用来编写容量很小的应用程序模块或者applet,做为网页的一部分使用。applet可使网页使用者和网页之间进行交互式操作。

Java平台由Java虚拟机(Java Virtual Machine)和Java 应用编程接口(Application Programming Interface、简称API)构成。Java 应用编程接口为Java应用提供了一个独立于操作系统的标准接口,可分为基本部分和扩展部分。在硬件或操作系统平台上安装一个Java平台之后,Java应用程序就可运行。Java平台已经嵌入了几乎所有的操作系统。这样Java程序可以只编译一次,就可以在各种系统中运行。Java应用编程接口已经从1.1x版发展到1.2版。常用的Java平台基于Java1.8,最近版本为Java19。

文章标题:java中偏向锁和轻量级锁有什么区别,发布者:小编,转载请注明出处:https://worktile.com/kb/p/38059

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小编小编认证作者
上一篇 2023年2月13日 下午11:00
下一篇 2023年2月13日 下午11:03

相关推荐

  • 创世伙伴梁宇:TMT投资圈知名暖男,做好每件普通而正确的事

    梁宇,朋友们给他起了个“大白”的外号,幽默、细腻、耐心、谦和、优质倾听者——焦虑与浮躁弥漫的时代下,很稀罕的一种气质。 听他讲述自己的故事,年少轻狂、误判、盼着下班打CS、在养老的氛围里消磨多年……泯然众人的要素一样不少。至于成长和成就?“可能也就运气比较好,赶上了数字信息时代的一波大浪。” 我信你…

    2022年3月20日
    74400
  • 物业二手项目如何管理

    物业二手项目的有效管理涉及多个方面,包括维持项目质量、提升服务效率、促进社区发展、实施有效的费用控制、及保持良好的沟通等。在这些方面中,维持项目质量是基础,它直接影响到居民对物业服务的满意度和物业项目的长期价值。有效的管理不仅提升了住户的生活质量,还能提高项目的市场竞争力。 一、维持项目质量 物业管…

    2024年4月10日
    3100
  • 如何管理好科普馆项目

    管理好科普馆项目要求专业实力、创新能力、项目规划、资源整合与团队合作五部分。专业实力提供给访客深度和广度兼具的科学知识,创新能力让科普馆项目持续引领学科前沿、项目规划确保科普馆的可持续发展,资源整合利用现有资源创造最大价值,而团队合作确保项目从规划到执行各环节效率高效、顺畅。 专业实力是科普馆成功的…

    2024年4月10日
    3800
  • oa账户是什么意思啊

    标题:OA账户的含义及运用 摘要:OA账户通常指办公自动化(Office Automation)系统中的用户账号,用于区分和管理不同用户的权限和数据。1、办公自动化工具: OA系统集成于企业信息化管理中,提升工作效率和沟通流畅性。2、个人身份验证: 账户确保个人信息和工作数据的安全性。3、权限管理:…

    2024年1月11日
    76200
  • 进度管理的意义是什么

    进度管理的意义有以下几点:1、进度管理对全局管理有重要意义;2、有效的进度管理能提高项目管理水平;3、合理的进度管理能提高经济效益。进度管理通过对影响进度的匀速进行全面分析、预测和控制,及时发现各种问题并解决问题,确保工程可以按时交付。 1、进度管理对全局管理有重要意义 关注项目进度,过程中能及时发…

    2022年11月30日
    2.4K00
  • Jira中实施有效的风险管理

    Jira软件作为一个项目管理工具,其实施有效的风险管理包含几个核心步骤:1、风险识别,2、风险评估,3、风险规划,4、风险监控。这些步骤确保项目能预见风险并进行妥善处理。 特别地,风险识别是风险管理的基础,需要通过团队会议、历史数据分析以及专家咨询来准确标识潜在风险点。在Jira中,可以通过创建专门…

    2024年1月3日
    27600
  • 如何保护您自己免遭 Typosquatting 侵害

    个人可以通过:避免点击意外电子邮件、短信、聊天消息或未知网站中的链接;使用防病毒软件来监控和防范恶意软件;仔细检查 URL等方式免遭 Typosquatting 侵害;对于组织来说,较好的策略是尽量保持名列前茅于 Typosquatting 攻击。 一、个人如何保护您自己免遭 Typosquatti…

    2022年10月24日
    37200
  • 什么app可以绘制路线图

    可以绘制路线图的app有:1. Google 地图;2. Komoot;3. MapMyWalk;4. Strava;5. Gaia GPS。Google 地图是一款非常出名的地图应用程序,它不仅可以作为导航工具,还可以用来绘制路线图。您可以使用Google 地图绘制您的旅行路线或跑步路线,并在地图…

    2023年2月27日
    4.9K00
  • settimeout和setinterval区别

    setTimeout和setInterval的区别主要体现在:1、执行次数不同;2、执行频率不同;3、实际应用不同。总的来说,setTimeout主要用于单次延迟执行,而setInterval用于持续重复执行。 一、执行次数不同 setTimeout的本质是延迟执行,只执行一次。一般用于延迟指定的时…

    2023年6月5日
    4.1K00
  • 如何分析软件项目风险管理

    分析软件项目的风险管理是一个复杂但至关重要的过程,它涉及到的关键步骤包括识别风险、评估风险、规划风险应对措施、实施风险应对以及监控风险。在这些步骤中,评估风险尤为重要,因为它涉及到确定每个风险的可能性和影响,以此来决定哪些风险需要优先管理。本文将详细介绍如何有效进行软件项目的风险管理,特别是如何对识…

    2024年4月10日
    7200

发表回复

登录后才能评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部