当前位置: 首页 > news >正文

ReentrantLock实现原理-公平锁

在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流程完全一致,这里不再赘述,需要了解可以在详细看下非公平锁部分的内容。

相关文章:

ReentrantLock实现原理-公平锁

在ReentrantLock实现原理(1)一节中,我们了解了ReentrantLock非公平锁的获取流程,在本节中我们来看下ReentrantLock公平锁的创建以及锁管理流程 创建ReentrantLock公平锁 创建公平锁代码如下: ReentrantLock reentrantLock new ReentrantL…...

掌握Scala数据结构(2)MAP、TUPLE、SET

一、映射 (Map) (一)不可变映射 1、创建不可变映射 创建不可变映射mp,用键->值的形式 创建不可变映射mp,用(键, 值)的形式 注意:Map是特质(Scala里的trait,相当于Java里的interface&#…...

flutter:文件系统目录、文件读写

参考 参考:老孟 文件存储和网络请求 数据存储 Dart的 IO 库包含了文件读写的相关类,它属于 Dart 语法标准的一部分,所以通过 Dart IO 库,无论是 Dart VM 下的脚本还是 Flutter,都是通过 Dart IO 库来操作文件的。但…...

计算机提示“找不到vcruntime140.dll,无法继续执行代码可”以这样子修复

首先,对于那些不熟悉的人来说,vcruntime140.dll是一个关键文件,用于在Windows操作系统上运行使用C语言编写的大型应用程序。如果你正在运行或安装这样的应用程序,但找不到vcruntime140.dll文件,那么你的应用程序可能无…...

深度学习pytorch实战五:基于ResNet34迁移学习的方法图像分类篇自建花数据集图像分类(5类)超详细代码

1.数据集简介 2.模型相关知识 3.split_data.py——训练集与测试集划分 4.model.py——定义ResNet34网络模型 5.train.py——加载数据集并训练,训练集计算损失值loss,测试集计算accuracy,保存训练好的网络参数 6.predict.py——利用训练好的网…...

Rust in Action笔记 第五章 深入理解数据

如果希望看到f32类型的数转换成整型数字u32类型,需要在unsafe包裹下调用std::mem::transmute(data),因为在安全的Rust语法中没有把整型数据按照bit转换成浮点数据的实现,如果想要看到浮点数的二进制输出(通过{:b})&…...

Cocos creator实现飞机大战空中大战《战击长空》小游戏资源及代码

Cocos creator实现飞机大战空中大战《战击长空》小游戏资源及代码 最近在学习Cocos Creator,作为新手,刚刚开始学习Cocos Creator,刚刚入门,这里记录一下飞机大战小游戏实现。 https://wxaurl.cn/VEgRy2eTMyi 一 安装CocosDashBo…...

2.4 逻辑代数的基本定理

学习目标: 如果我要学习逻辑代数的基本定理,我会采取以下步骤: 1. 学习基本概念:首先,我会花时间了解逻辑代数的基本概念,如逻辑运算符(合取、析取、否定等)、真值表、逻辑等价性等…...

适用于 Linux 的 Windows 子系统wsl文档

参考链接:https://learn.microsoft.com/zh-cn/windows/wsl/ 鸟哥的Linux私房菜:http://cn.linux.vbird.org/ http://cn.linux.vbird.org/linux_basic/linux_basic.php http://cn.linux.vbird.org/linux_server/ 目录 安装列出可用的 Linux 发行版列出已…...

C++特殊类的设计与类型转换

特殊类的设计与类型转换 特殊类的设计请设计一个类,只能在堆上创建对象请设计一个类,只能在栈上创建对象请设计一个类,只能创建一个对象(单例模式) C的类型转换 特殊类的设计 请设计一个类,只能在堆上创建对象 通过new创建的类就…...

如何通过关键词搜索API接口

如果你是一位电商运营者或者是想要进行1688平台产品调研的人员,你可能需要借助API接口来获取你所需要的信息。在这篇文章中,我们将会讨论如何通过关键词搜索API接口获取1688的商品详情。 第一步:获取API接口的授权信息 在使用API接口前&…...

智驾域控新战争打响,谁在抢跑?

智能驾驶域控制器赛道,已经成为了时下最为火热的市场焦点之一。 最近,头部Tier1均胜电子公布了全球首批基于高通Snapdragon Ride第二代芯片平台的智能驾驶域控制器产品nDriveH,在这一赛道中显得格外引人注意。 就在不久之前,均胜…...

Android 13无源码应用去掉无资源ID的按钮

Android Wifionly项目,客户要求去掉谷歌联系人里的 手机联系人按钮 需求分析 无应用源码,只能通过系统侧去修改 首先通过 Android Studio 工具 uiautomatorviewer 获取父控件资源ID chip_group ,然后通过遍历获取子控件去掉目标按钮 --- a/frameworks/base/core/java/andr…...

【SCI征稿】中科院2区(TOP),正刊,SCIEEI双检,进化计算、模糊集和人工神经网络在数据不平衡中应用

【期刊简介】IF:8.0-9.0,JCR1区,中科院2区(TOP) 【检索情况】SCIE&EI 双检,正刊 【数据库收录年份】2004年 【国人占比】22.78%(期刊国际化程度高) 【征稿领域】进化计算、模…...

Android Audio开发——AAudio基础(十五)

AAudio 是一个自 Android O 引入的新的 Android C API。它主要是为需要低延迟的高性能音频应用设计的。应用程序通过直接从流中读取或向流中写入数据来与 AAudio 通信,但它只包含基本的音频输入输出能力。 一、AAudio概述 AAudio 在应用程序和 Android 设备上的音频输入输出之…...

SDK接口远程调试【内网穿透】

文章目录 1.测试环境2.本地配置3. 内网穿透3.1 下载安装cpolar内网穿透3.2 创建隧道 4. 测试公网访问5. 配置固定二级子域名5.1 保留一个二级子域名5.2 配置二级子域名 6. 使用固定二级子域名进行访问 转发自cpolar内网穿透的文章:Java支付宝沙箱环境支付&#xff0…...

Mybatis学习笔记二

目录 一、MyBatis的各种查询功能1.1 查询一个实体类对象1.2 查询一个List集合1.3 查询单个数据1.4 查询一条数据为map集合1.5 查询多条数据为map集合1.5.1 方法一:1.5.2 方法二: 二、特殊SQL的执行2.1 模糊查询2.2 批量删除2.3 动态设置表名2.4 添加功能…...

大屏数据可视化开源项目

一、DataGear —— 数据可视化项目 官网:DataGear - 开源免费的数据可视化分析平台 DataGear 是一款开源免费的数据可视化分析平台,数据可视化看板。 功能特性: 1、多种数据源,支持运行时接入任意提供 JDBC 驱动的数据库&#…...

面试经典150题:数组/字符串合集

新专栏&#xff0c;预计两个月写完吧&#xff0c;每天下班回来抽空做几道题。会把做题计划顺序记录下来&#xff0c;如果你有缘&#xff0c;刷到这个开篇序列&#xff0c;那就跟着文章去练题吧。初学者可以慢慢来 88. 合并两个有序数组 void merge(vector<int>& nums…...

Java源文件的执行过程

目录 1.JVM 2.字节码 3.Java源文件执行的过程 4.JIT&#xff08;Just In Time Compilation&#xff09; 5.AOT&#xff08;Ahead Of Time Compilation&#xff09; 6.AOT破坏Java动态性 7.编译型语言与解释型语言 8.Java-编译与解释并存的语言 9.Java和C的相同点与不同…...

10个ai算法常用库java版

今年ChatGPT 火了半年多,热度丝毫没有降下来。深度学习和 NLP 也重新回到了大家的视线中。有一些小伙伴问我,作为一名 Java 开发人员,如何入门人工智能,是时候拿出压箱底的私藏的学习AI的 Java 库来介绍给大家。 这些库和框架为机器学习、深度学习、自然语言处理等提供了广…...

怎么看服务器带宽大小 103.219.179.X

第一种&#xff0c;可以使用网站测速&#xff0c;这种方式比较便捷&#xff0c;但是由于网站测速是测试服务器发送数据包到他网站节点的一个速度情况&#xff0c;有时候节点问题或者服务器做了封包限制可能导致测试不准确的情况。 第二种&#xff0c;可以在IIS上架设一个大一点…...

图形编辑器开发:最基础但却复杂的选择工具

大家好&#xff0c;我是前端西瓜哥。 对于一个图形设计软件&#xff0c;它最基础的工具是什么&#xff1f;选择工具。 但这个选择工具&#xff0c;却是相当的复杂。这次我来和各位&#xff0c;细说细说选择工具的一些弯弯道道。 我正在开发的图形设计工具的&#xff1a; http…...

apk签名-signapk.jar

如果做平台app开发&#xff0c;需要签platform签名&#xff0c;除了通过adroid.bp或者android.mk的方式使用AOSP整个大工程中签名外&#xff0c;还可以直接通过signapk.jar的方式进行签名&#xff0c;效率更高更快捷简便。 首先我们来回顾下AOSP平台签名的办法。 Android.mk 使…...

【100个高大尚求职简历】简历模板+修改教程+行业分类简历模板 (涵盖各种行业) (简历模板+编辑指导+修改教程)

文章目录 1 简历预览2 简历下载 很多人说自己明明投了很多公司的简历&#xff0c;但是都没有得到面试邀请的机会。自己工作履历挺好的&#xff0c;但是为什么投自己感兴趣公司的简历&#xff0c;都没有面试邀请的机会。反而是那些自己没有投递的公司&#xff0c;经常给自己打电…...

Nginx平滑升级版本或添加模块

文章目录 一、Nginx 平滑升级二、升级失败 回滚操作三、遇到问题 一、Nginx 平滑升级 一般有两种情况下需要升级 nginx&#xff0c;一种是确实要升级 nginx 的版本&#xff0c;另一种是要为 nginx 添加新的模块。 Nginx平滑升级其原理简单概括&#xff1a; &#xff08;1&am…...

高阶复杂网络重建:从时间序列中重建高阶网络

论文链接&#xff1a;https://www.nature.com/articles/s41467-022-30706-9 一、为什么要研究高阶网络&#xff1f; 复杂网络跟我们生活息息相关&#xff0c;例如社交网络的信息传播&#xff0c;疾病的感染扩散和基因调控网络的相互作用等。越来越多的研究突破了传统网络中两…...

Day05 03-MySQL主从-主主原理与搭建详解

文章目录 第十六章 MySQL的系统架构&#xff08;主从架构&#xff09;16.1 MySQL集群架构的介绍16.1.1 主从架构介绍16.1.2 主从复制的原理 16.2 MySQL主从复制的实现16.2.1 环境说明16.2.2 主库配置16.2.3 从库配置16.2.4 主从复制测试 16.3 MySQL主主复制的实现16.3.1 主主复…...

STL之vector

目录 vector模拟实现一. vector的基本框架二. 常用方法及实现1.初始化和清理a. 默认构造函数b. 析构函数 2. 迭代器a. beginb. end 3.数据访问a. sizeb. capacityc. operator[]d. frontc. back 4.增删查改操作a. reserveb. resizec. insertd. push_backe. erasef. pop_back 5.构…...

2020年CSP-J认证 CCF非专业级别软件能力认证第一轮真题-单项选择题解析

2020 CCF认证第一轮&#xff08;CSP-J&#xff09;真题 一、单项选择题 (共15题&#xff0c;每2分&#xff0c;共30分;每题有且有一个正确选项&#xff09; 1、在内存储器中每个存储单元都被赋予一个唯一的序号,称为 A、下标 B、序号 C、地址 D、编号 答案&#xff1a;C…...

网站关键词优化报价/怎么开展网络营销推广

1、mongodb安装好后第一次进入是不需要密码的&#xff0c;也没有任何用户&#xff0c;通过shell命令可直接进入&#xff0c;cd到mongodb目录下的bin文件夹&#xff0c;执行命令./mongo即可运行如下&#xff1a;[rootnamenode mongodb]# ./bin/mongo MongoDB shell version: 1.8…...

怎么网站建设多少钱/百度网站怎么提升排名

今天在调试项目的时候使用SqlServer遇到了上面的错误&#xff1a; 我像管理员表中插入数据&#xff1a; inert into Admin vlues(1,liu,123) 在结果窗口中显示了&#xff1a;仅当使用了列的列表&#xff0c;并且 IDENTITY_INSERT 为 ON 时&#xff0c;才能在表 Admin 中为标识列…...

什么网站可以做高数/五年级下册数学优化设计答案

基于注解方式的Bean管理 AOP 写法一:匿名内部类 写法二: AOP操作&#xff08;AspectJ注解&#xff09; AOP操作&#xff08;AspectJ配置文件&#xff09; JdbcTemplate(概念和准备&#xff09;...

厦门微信网站建/今天新闻

如图所示: 如果此时给.div1添加属性 position属性是 .div1就会消失不见 那么此时就必须显示给.div1加上宽度&#xff0c;才能显示出来结果如图所示:转载于:https://blog.51cto.com/11871779/2072041...

160 作者 网站建设/seo综合查询站长工具关键词

五年级信息技术考试试题一、填空题。(每空3分共&#xff0c;21分)1、电子邮件是用Internet 进行的最普遍形式&#xff0c;它的英文名叫_____ 。2、_____是接收被删除的文件和文件夹。3、在电子邮箱中&#xff0c; _____是来信聚集地。4、幻灯片的目录区显示的是演示文稿的幻灯片…...

网站开发课程培训/爱站seo工具包官网

Oracle Golden Gate软件是一种基于日志的结构化数据复制备份软件&#xff0c;它通过解析源数据库在线日志或归档日志获得数据的增量变化&#xff0c;再将这些变化应用到目标数据库&#xff0c;从而实现源数据库与目标数据库同步。Oracle Golden Gate可以在异构的IT基础结构&…...