码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Java并发 | 19.[锁机制] 偏向锁(CAS)


    文章目录

    • 1. 偏向锁分析
      • 回顾轻量级锁
      • 偏向锁的优势
    • 2. 偏向锁(CAS)
      • 2.1. 偏向锁流程概述
      • 2.2. 锁升级
    • 参考资料

    1. 偏向锁分析

    回顾轻量级锁

    在上文 Java并发 | 18.[锁机制] 轻量级锁(CAS+自旋锁)中对轻量级锁进行过解析,实现轻量级锁,不仅上锁解锁时要频繁进行CAS操作,且如果频繁出现重入锁,则会有很多次没有意义的CAS操作。

    偏向锁的优势

    偏向锁适用于 从始至终都只有一个线程在运行的情况。它只是通过CAS在 obj 的 MarkWord 中标记了线程ID,每次 获取锁,只需要比对线程ID是否匹配即可。

    相比轻量级锁,偏向锁认为由始至终都只有一个线程在运行,所以没有解锁的过程,只是在 MarkWord 中标记线程ID,更加节约性能。每次都核对一下ID是否一致,一致则执行,不一致则考虑升级。

    2. 偏向锁(CAS)

    2.1. 偏向锁流程概述

    • [第一个线程上锁] 线程 t1 访问 obj 的MarkWord,发现它并没有被任何线程绑定,于是将自己的线程ID标记上去;

    • [t1再次执行] t1 执行结束后不会执行任何解锁操作。当它再次执行代码块时,发现线程ID与自己的匹配,于是直接执行;

    • [t2竞争锁] 若某个时刻有 t2 访问 obj 的 MarkWord,发现它已被线程t1绑定,那么会在一个全局安全点停止t1,并检查t1的状态:

      • 若 t1 已停止,则认为不会产生竞争,t2 将 MarkWord 的线程ID换成自己的;
      • 若 t1 仍活跃,说明产生了竞争,则会将锁升级为轻量级锁。

      偏向锁

    2.2. 锁升级

    t2 与 t1 发生锁竞争,在停止 t1 后若发现它依旧活跃,就会将「偏向锁」升级成「轻量级锁」,此时 t1 将被唤醒并继续执行,而 t2 则会与 obj 的 MarkWord 发生 CAS,待 t1 执行完毕,t2 就会以轻量级锁的方式开始执行代码。

    参考资料

    [文章] 从偏向锁是如何升级到重量级锁的-偏向锁

  • 相关阅读:
    基于java班费收支管理系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署
    第十三届蓝桥杯C++B组省赛 I 题——李白打酒加强版 (AC)
    分页功能分析
    协程设计原理
    嵌入式开发--CubeMX使用入门教程
    .NET MVC第二章、控制器使用
    Tomcat 源码分析 (Tomcat的Session管理) (十一)
    国芯方案——电子吊钩秤方案
    SpringBoot项目实战:笔记记录分享网站-计算机毕业设计选题推荐
    在 Apache Tomcat 服务器上启用 HTTPS 或 SSL 正确方式的分步指南 – 端口 8443
  • 原文地址:https://blog.csdn.net/xyxyxyxyxyxyx/article/details/126654136
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号