码农知识堂 - 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 就会以轻量级锁的方式开始执行代码。

    参考资料

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

  • 相关阅读:
    VAPS XT开发入门教程07:表元素(TableElements)介绍
    Java抽象类
    【JAVA】idea初步使用+JDK详细配置
    Unity中实现ScrollRect 滚动定位到视口内
    基于springboot 手工艺品在线展示系统-计算机毕设 附源码 42553
    第二章 指针仪表识别之仪表倾斜校正
    Java版企业工程管理系统源码 及 功能清单+Spring Cloud+Spring Boot+Mybatis
    互联网商业模式分享购买是什么?
    Zabbix监控部署项目
    剑指 Offer 26. 树的子结构
  • 原文地址:https://blog.csdn.net/xyxyxyxyxyxyx/article/details/126654136
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号