ReentrantLock实现原理-公平锁

news2025/2/13 22:48:49

在ReentrantLock实现原理(1)一节中,我们了解了ReentrantLock非公平锁的获取流程,在本节中我们来看下ReentrantLock公平锁的创建以及锁管理流程

创建ReentrantLock公平锁

创建公平锁代码如下:

ReentrantLock reentrantLock = new ReentrantLock(true);

公平锁ReentrantLock.lock流程分析

使用上文创建的ReentrantLock公平锁,执行lock,流程如下所示:

FairReentrantLock.lock1

从图中可以看出,相对非公平锁而言,公平锁代码中主要有以下区别:

  1. 在lock函数实现上,非公平锁会直接先通过CAS操作锁状态标记,操作失败才会将请求提交给AQS,而公平锁会直接将请求提交给AQS

    1-4-13-1

  2. 在tryAcquire函数流程中(非公平锁调用父类的nonfairTryAcquire),非公平锁是在锁状态标记为0时,直接通过CAS修改锁标记为1,公平锁是在锁状态标记为0且等待队列为空时,才通过CAS操作锁状态标记

    1-4-13-2

    同时这里也可以看出不管是公平锁实现还是非公平锁实现,当前线程是持有锁线程时,都是直接获取锁的,充分体现了ReentrantLock的可重入性的特点

通过这两处变动,就保证了在公平锁实现中,新来的线程必然是先排队,随后按照队列顺序获取锁的,接下里的线程排入等待队列的流程,两种锁的实现是完全重用的,这里不再赘述,需要了解可以再详细看非公平锁部分的内容。

结合lock的时序图,我们可以得到获取公平锁的流程如下图所示:

FairReentrantLock_lock_process.drawio

公平锁ReentrantLock.unlock流程分析

查看代码,两种锁的unlock流程完全一致,这里不再赘述,需要了解可以在详细看下非公平锁部分的内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/639444.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

elementui 自定义loading动画加载层

elementui 自定义loading动画加载层。main.js中添加 import { Loading } from element-ui /* 自定义加载层 */ Vue.prototype.openLoading function(wer) {const loading Loading.service({lock: true, // 是否锁屏text: , // 加载动画的文字// spinner: inner-circles-loade…

数据库期末复习(8)并发控制

笔记 数据库DBMS并发控制(1)_旅僧的博客-CSDN博客 数据库 并发控制(2)死锁和意向锁_旅僧的博客-CSDN博客 冲突可串行化和锁 怎么判断是否可以进行冲突可串行化:简便的方法是优先图 只有不同对象和同一对象都是读才不能发生非串行化调度。我真傻 两个节点其实也可以算是一…

粤海街道后海村城市更新单元旧改项目,规划建面约42.6万平

项目名称:粤海街道后海村城市更新单元 项目地址:南山区粤海街道,西临天后西路,东至后海大道,南近东滨路,北近创业路。 开发商:远洋集团 申报主体:深圳市蛇口后海实业股份公司 拆…

SEMICON China 2023| 加速科技将携全系新品重磅亮相,欢迎打卡加速科技展台

2023年6月29日-7月1日,全球规模最大、规格最高的半导体行业盛会—SEMICON China 2023将在上海新国际博览中心盛大举行。作为业内领先的半导体测试设备供应商,杭州加速科技将携全系重磅新品及全系列测试解决方案受邀参展。 展位信息:E5馆 5643…

pytest+allure+jenkins持续集成及生成测试报告

目录 前言 一、jenkins安装 二、插件安装 三、构建项目 四、查看运行结果 总结: 前言 前面,讲了“Pycharmpytestallure打造高逼格的测试报告”,但实际工作中,往往需要通过jenkins进行自动化测试用例的持续集成并自动生成测试…

KW 喜报 | KaiwuDB 斩获 2023 数博会“优秀科技成果”奖

5月26日,大数据领域的国家级盛会——2023 中国国际大数据产业博览会(以下简称“2023 数博会”)在贵阳盛大开幕。作为大会最重磅的环节之一,“2023 领先科技成果发布会”于数博发布中心场地举办,向全行业发布 70 余项兼…

数据脱敏/换行/枚举的处理【EasyPoi实战系列】- 第474篇

历史文章(文章累计460) 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 《国内最全的Spring Boot系列之六》 【…

DDP分布式训练中遇到的一些问题

1:所有forward的输出必须参与到loss计算并回传 2:类似于layer_norm这样的操作是无需进行分布式通信的,也无法进行分布式通信,所以在DDP的时候必须把find_unused_parameters设置为True 3:当报错形式为如下时&#xff…

C语言之指针初阶(2)

目录 1. 指针是什么 2. 指针和指针类型 3. 野指针 4. 指针运算 5. 指针和数组 6. 二级指针 7. 指针数组 上次我们已经把前4个部分给大家讲完了,现在我们来讲一下后面三个部分 首先看数组和指针 指针和数组之间是什么关系呢? 指针变量就是指针变量&…

ELF文件结构和实战分析

文章目录 示例编译运行 ELF文件格式ELF HeaderELF Section Header Table (节头表)sh_typesh_flagssh_link、sh_info 节链接信息 ELF Sections节的分类.text节.rodata节.plt节(过程链接表).data节.bss节.got.plt节(全局偏移表-过程链接表&…

小黑和阿黄骑车逛了逛河堤,今天练完钢琴小汤3第5课后和小老黑吃拉面夜里准备天津小黄车骑行的leetcode之旅:567. 字符串的排列

小黑代码 class Solution:def checkInclusion(self, s1: str, s2: str) -> bool:# s1与s2的长度n_s1 len(s1)n_s2 len(s2)# 非法情况if n_s1 > n_s2:return False# 初始化差值向量count [0] * 26# 判断初始状态是否成立for i in range(n_s1):count[ord(s1[i])-97] - …

MySQL数据库 --- 高级篇

一、存储引擎 1.1、MySQL体系结构 1.1.1、连接层 最上层是一些客户端和链接服务,包含本地sock 通信和大多数基于客户端/服务端工具实现的类似于TCP/IP的通信。主要完成一些类似于连接处理、授权认证、及相关的安全方案。在该层上引入了线程池的概念,为…

Mybatis-Plus中update更新操作用法

目录 一、前言二、update1、关于修改的4个条件构造器2、UpdateWrapper【用法示例】3、LambdaUpdateWrapper【用法示例】4、UpdateChainWrapper【 用法示例】5、LambdaUpdateChainWrapper【 用法示例】6、updateById 和 updateBatchById7、Mybatis-plus设置某个字段值为null的方…

Fiddler Response私人订制,你知道多少

目录 前言 特定返回状态码的模拟 特定字段数据的模拟 修改“Customize Rules" 特定加密返回值的模拟 Fiddler的TextWizard 结束语 总结: 前言 在客户端接口的测试中,我们经常会需要模拟各种返回状态或者特定的返回值,常见的是用…

MySQL数据库 --- 基础篇

一、MySQL概述 1.1、数据库相关概念 名称全称简称数据库存储数据的仓库,数据是有组织的进行存储DataBase(DB)数据库管理系统操纵和管理数据库的大型软件DataBase Management、System (DBMS)SQL操作关系型数据库的编程语言,定义了…

【网络安全】深入解析 PHP 代码审计技术与实战

前言 登录某个网站并浏览其页面时,注意到了一些看起来不太对劲的地方。这些迹象可能是该网站存在漏洞或被黑客入侵的标志。为了确保这个网站的安全性,需要进行代码审计,这是一项专门针对软件代码进行检查和分析的技术。在本文中,…

从汇编代码探究函数栈帧的创建和销毁的底层原理

人,只有在放弃战斗的时候才算输,只要坚持战斗,就还没输 本文收录于青花雾气-计算机基础 往期回顾 从0到1搞定在线OJ 数据在内存中的存储 计算机存储的大小端模式 目录 一、先导知识 二、函数调用堆栈 三、函数栈帧的创建 1.创建函数…

计算机图像处理—HOG 特征提取算法

一、实验介绍 1. 实验内容 本实验将学习HOG 特征提取算法。 2. 实验要点 HOG 算法HOG 算法有效的原因创建 HOG 描述符HOG 描述符中的元素数量可视化 HOG 描述符理解直方图 3. 实验环境 Python 3.6.6numpymatplotlibcv2copy 二、实验步骤 简介 正如在 ORB 算法中看到的…

机器学习—支持向量机

练习5:支持向量机 介绍 在本练习中,我们将使用支持向量机(SVM)来构建垃圾邮件分类器。 在开始练习前,需要下载如下的文件进行数据上传: data.tgz -包含本练习中所需要用的数据文件 其中: e…

华为OD机试 JavaScript 实现【计算字符串的编辑距离】【牛客练习题 HJ52】,附详细解题思路

一、题目描述 Levenshtein 距离,又称编辑距离,指的是两个字符串之间,由一个转换成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。编辑距离的算法是首先由…