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

相关推荐

  • oa办公系统哪个好

    标题:OA办公系统选择指南 摘要:选择OA办公系统需关注1、功能全面性、2、用户友好度、3、系统安全性、4、技术支持与服务、5、定制化和扩展性、6、性价比。功能全面性是决定系统是否能满足企业不同部门和层级需求的关键因素,涵盖了文档管理、任务与项目管理、通讯录、邮箱集成以及移动办公等诸多模块。挑选OA…

    2024年1月11日
    11200
  • 财务管理系统的研发

    财务管理系统研发旨在实现对企业经济活动的有效监控与管理,提高资金使用效率、确保账务准确无误、增强财务透明度、加强风险控制、优化财务决策过程。现代财务管理系统通常依托先进的信息技术,如大数据分析、人工智能及云计算等,以提升系统的综合性能和用户体验。其中,提高资金使用效率,为企业节省成本,通过对财务流程…

    2024年1月9日
    14700
  • 怎么编写测试用例

    编写测试用例的流程:1、需求分析;2、提取测试点;3、测试用例编写;4、测试用例评审。需求分析分为业务需求、用户需求和功能需求,业务需求关注系统是否满足业务。 1、需求分析 2、提取测试点 测试点是针对软件所列出的功能各个情况的梳理在某种程度上来说,他是功能模块的细化,但是又比写出的用例要粗糙,更像…

    2023年1月31日
    38400
  • 为什么很多网站前端使用PHP后台逻辑用Java

    网站前端使用PHP后台逻辑用Java是因为:1、PHP需要重复执行;2、PHP容易犯错;3、Java的世界里也有JSTL、Velocity和Freemaker等。PHP由于其动态脚本语言的特性,包括类、函数、常量在内都需要在每次请求周期中重复执行后才能建立运行环境。 1、PHP需要重复执行 PHP由…

    2023年1月30日
    49600
  • DevOps和传统软件开发有什么区别

    DevOps是一种软件开发管理实践,旨在缩短系统开发生命周期,同时提供高质量的软件和 频繁、可靠的代码更新。它与传统软件开发的主要区别包括1、开发与运营的整合、2、持续集成与持续部署、3、自动化的流程、4、文化与实践的改变、5、反馈与改进的循环。DevOps强调的是开发(Dev)和运营(Ops)团队…

    2023年11月18日
    38100
  • oa系统都有什么功能

    OA系统的主要功能包括:1、流程自动化管理;2、协同办公;3、文档管理;4、通讯录管理;5、项目管理;6、时间和任务管理。 其中,流程自动化管理功能是OA系统的核心,它可以有效地优化企业的工作流程,减少人为错误,加快信息流转速度。 在企业的日常运营中,流程自动化管理起着至关重要的作用。它让复杂的审批…

    2024年1月11日
    12900
  • 预算任务发布平台有哪些

    预算任务发布平台有:1、Upwork;2、Fiverr;3、Freelancer;4、Toptal;5、Guru;6、Zhubajie。其中,每个平台都有其特色和服务焦点,例如,Upwork和Freelancer广泛覆盖多种类型的预算任务,而Toptal则专注于拔尖的自由职业者。 1、Upwork …

    2023年7月11日
    54200
  • 软件开发需要投入哪些

    软件开发需要投入:1、业务需求成本;2、开发成本;3、升级成本;4、固定成本;5、维护成本。业务需求成本是指,一个软件产品,在实际进入实际开发阶段之前,需要进行大量的前期市场调研、可行性分析的花销。 1、业务需求成本 一个软件产品,在实际进入实际开发阶段之前,需要进行大量的前期市场调研、可行性分析,…

    2023年1月9日
    72400
  • oa发文是什么意思

    OA系统指办公自动化系统(Office Automation System)。所谓“OA发文”,是指在这个系统内按照单位规定的程序对外部或内部发出的正式文件。1、办公自动化提高效率。主要功能包括文档管理、流程审批、信息发布等,它能够加速文件处理流程,减少纸质文件使用,并可实现快速检索与保密性较好的文…

    2024年1月11日
    14300
  • 知识库怎么做

    做知识库的步骤:1、明确目标;2、选择平台;3、组织结构;4、写作规范;5、编写内容;6、维护知识库。在开始建立知识库之前,需要先明确目标。你的知识库将用于什么目的?它将涵盖哪些主题?这些问题的答案将帮助你确定知识库的范围和内容。 1、明确目标 在开始建立知识库之前,需要先明确目标。你的知识库将用于…

    2023年2月27日
    26800

发表回复

登录后才能评论
站长微信
站长微信
电话联系

400-800-1024

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

分享本页
返回顶部