Java并发 | 19.[锁机制] 偏向锁(CAS)

article/2025/10/21 13:10:04

文章目录

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

参考资料

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


http://chatgpt.dhexx.cn/article/XePNKpwQ.shtml

相关文章

Synchronized-偏向锁

偏向锁是什么? 是jdk1.6引入的一种锁优化方式。让 锁对象 偏心于第一次获取锁的线程,记住它的id,当下一次再有线程获取锁的时候,与记录的ID匹配,直接获取锁就行。是一种load-and-test的过程。 引入目的? …

面试题-- 什么是偏向锁

所谓的偏向,就是偏心,即锁会偏向于当前已经占有锁的线程 。 大部分情况是没有竞争的(某个同步块大多数情况都不会出现多线程同时竞争锁),所以可以通过偏向来提高性能。即在无竞争时,之前获得锁的线程再次获…

Java中的偏向锁,轻量级锁, 重量级锁解析

文章目录 参考文章Java 中的锁一些先修知识synchronized 关键字之锁的升级(偏向锁->轻量级锁->重量级锁)无锁 -> 偏向锁偏向锁的撤销(Revoke)偏向锁的批量再偏向(Bulk Rebias)机制偏向锁 -> 轻…

条件分布

1.离散型: 例1: 2.连续型:

关于多元正态分布的条件分布的证明

之前在机器学习 cs229学习笔记3 (EM alogrithm,Mixture of Gaussians revisited & Factor analysis )中直接给出了多元正态分布的条件概率 正好今天上课讲了多元正态分布的内容,但没有涉及条件概率,所以下来baidu了一下,找到一个不错的pp…

条件分布函数(离散-条件分布律)

一、离散随机变量的条件分布函数 1.0、条件分布函数定义 1.1、例 1.1.1、例1 1.1.2、例2 二、连续型随机变量的条件分布函数 2.1、连续随机变量的条件分布函数 2.2、条件概率密度函数

第三章 多维随机变量及其分布 3.3 条件分布

第三章 多维随机变量及其分布 3.3 条件分布 文章目录 第三章 多维随机变量及其分布 3.3 条件分布离散型随机变量的条件分布连续型随机变量的条件分布 离散型随机变量的条件分布 例: 求: 离散型的直接套条件概率的公式就行了。 连续型随机变量的条件分布…

~《概率论》~条件分布

《概率论》条件分布 文章目录 ~《概率论》~条件分布一、离散型随机向量的条件分布1.1、定义1.2、性质 二、连续型随机向量的条件分布2.1、定义2.2、性质 一、离散型随机向量的条件分布 1.1、定义 1.2、性质 二、连续型随机向量的条件分布 2.1、定义 2.2、性质

MCMC算法--Gibbs采样2:多元高斯分布的边际分布与条件分布推导

因为在下篇博客中会介绍Gibbs采样,代码示例用到的是多元高斯分布,所以对条件分布,边际分布公式必须写出来,所以博主整理了下。 参考文献为:http://fourier.eng.hmc.edu/e161/lectures/gaussianprocess/node7.html 由…

条件高斯分布

多元高斯分布的一个重要性质是如果两个变量集是联合高斯分布,那么其中一个基于另一个变量集上的条件分布仍然是高斯分布。边缘高斯分布也有类似结论。 考虑第一种情形的条件高斯分布。假设 X 是一个满足高斯分布 的 D 维向量,我们把 X 分作两个子集 Xa 和…

【概率论】3-6:条件分布(Conditional Distributions Part I)

原文地址1:https://www.face2ai.com/Math-Probability-3-6-Conditional-Distributions-P1转载请标明出处 Abstract: 首先介绍随机变量的条件分布,随后介绍随机变量条件分布下的乘法法则,贝叶斯公式和全概率公式 Keywords: Discrete Conditio…

概率论与数理统计(3.3)二维随机变量条件分布

这个条件分布主要只针对二维的 一、离散型随机变量的条件分布 同理固定一个X为一个常数则可得Y的条件分布律 **注:**离散型的求在什么条件下X或Y的条件分布律,知道他们的联合分布律很重要. 1) 观察这个公式。 注:必须知道P{X1}的…

多元正态分布条件分布公式总结

假设X是有两个随机向量组成 其中 假设X服从多元高斯分布其中 多元正态分布

【概率论】二维随机变量:联合分布律、边缘分布律和条件分布律之间的关系

摘要:本文主要介绍二维随机变量的联合分布律、边缘分布律和条件分布律之间的关系,并以矿山事故为例,强化对三者关系的认识。 一、联合分布律、边缘分布律和条件分布律之间的关系 1、若已知(X, Y)的联合分布率 > 可以求出X的边缘分布律和…

用最简洁的方法证明多元正态分布的条件分布

在证明高斯-马尔科夫随机过程的性质的过程中,遇到了多元正态分布的条件分布的证明,百度发现条件分布的很多证明方法写的极其麻烦,所以自己写了一个。 实际上多元随机变量的公式证明一般用矩阵的方法处理,这里就是采用这种方法&…

联合分布、条件分布、边缘分布还有贝叶斯公式

https://blog.csdn.net/zgcr654321/article/details/85201614?utm_mediumdistribute.pc_relevant.none-task-blog-OPENSEARCH-1.nonecase&depth_1-utm_sourcedistribute.pc_relevant.none-task-blog-OPENSEARCH-1.nonecase 文章目录 联合概率及其分布、边缘概率及其分布、…

概率论-3.5 条件分布与条件期望

离散随机变量的条件分布: 二位随机变量(X,Y)的联合分布列:pijP(Xxi,Yyj) P(Yyj)Sum(P(Xxi,Yyj)),对xi累加 P(Xxi)Sum(P(Xxi,Yyj)),对yj累加 条件分布列: pi | j P(Xxi | Yyj)P(Xxi,Yyj) / P(Yyj)pij / pj pj | i P(Yyj…

3.3 二维随机变量条件分布

学习目标: 要学习二维随机变量的条件分布,我可能会采取以下步骤: 复习边缘分布和联合分布:首先需要了解二维随机变量的边缘分布和联合分布的概念以及相应的公式。 复习条件概率:学习条件概率的定义和计算公式&#x…

NPOI 下载

https://www.nuget.org/packages/NPOI/