当前位置: 首页 > 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的相同点与不同…...

微信自动化终极指南:5个强大功能助你高效管理微信数据

微信自动化终极指南&#xff1a;5个强大功能助你高效管理微信数据 【免费下载链接】wechat-toolbox WeChat toolbox&#xff08;微信工具箱&#xff09; 项目地址: https://gitcode.com/gh_mirrors/we/wechat-toolbox 还在为繁琐的微信数据管理而烦恼吗&#xff1f;微信…...

ARM CoreSight DAP-Lite调试架构与双协议切换技术

1. ARM CoreSight DAP-Lite技术架构解析作为ARM调试体系的核心组件&#xff0c;DAP-Lite&#xff08;Debug Access Port Lite&#xff09;是嵌入式系统开发中连接调试工具与片上资源的桥梁。我在实际芯片调试中发现&#xff0c;这个仅约2mm面积的IP模块&#xff0c;却能实现传统…...

Claude长文档推理能力跃迁全记录(2024–2026技术演进图谱)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Claude 2026长文档推理能力的定义与边界 Claude 2026 的长文档推理能力指其在单次上下文窗口内&#xff08;最大支持 2,000,000 tokens&#xff09;对跨章节、多模态混合结构化文本&#xff08;含嵌入表…...

计算机视觉数据集选型实战指南:从COCO到Roboflow的工程决策框架

1. 这份清单不是“资料库目录”&#xff0c;而是计算机视觉工程师的实战弹药箱如果你正在训练一个能识别工业零件表面微小划痕的模型&#xff0c;却在COCO数据集上反复调参&#xff1b;或者你刚拿到一批医院提供的CT影像&#xff0c;第一反应是去Kaggle搜“medical image datas…...

LaMa图像修复:基于傅里叶卷积的大掩码鲁棒修复方法

1. 项目概述&#xff1a;这不是又一个“修图工具”&#xff0c;而是一次对图像修复底层逻辑的重新定义LaMa——全称Large Mask Inpainting&#xff0c;直译是“大区域掩码图像修复”&#xff0c;但它的实际能力远超字面。我第一次在CVPR 2022论文里看到它时&#xff0c;第一反应…...

3分钟掌握Windows安装APK:告别复杂模拟器的终极方案

3分钟掌握Windows安装APK&#xff1a;告别复杂模拟器的终极方案 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否曾经遇到过这样的场景&#xff1f;同事发来一个实…...

大模型提示词驱动的工业图像标注流水线实战

1. 这不是“打标签”&#xff0c;而是让大模型替你做标注决策的整套工作流“Prompt-Based Automated Data Labeling and Annotation”——光看这个标题&#xff0c;很多人第一反应是&#xff1a;“哦&#xff0c;用大模型自动打标签”。但干过三年以上NLP数据工程、带过两个以上…...

Next.js功能开关实践:用happykit/flags实现灰度发布与A/B测试

1. 项目概述&#xff1a;为什么我们需要一个功能开关系统&#xff1f;在软件开发&#xff0c;尤其是现代Web应用和微服务架构的迭代过程中&#xff0c;我们经常面临一个经典困境&#xff1a;新功能开发完成后&#xff0c;是直接全量发布给所有用户&#xff0c;还是先小范围灰度…...

2025届最火的六大AI辅助写作网站解析与推荐

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 这些年&#xff0c;“论文一键生成”类工具可多了&#xff0c;吸引着有写作压力的学生&#…...

Windows升级Node版本指南

在 Windows 上升级 Node.js&#xff0c;主要有四种方法&#xff0c;各有侧重。对于大多数开发者&#xff0c;使用版本管理工具 nvm-windows 是最灵活高效的选择。 Windows安装Node.js&#xff1a; 步骤1&#xff1a;访问 Node.js 官方网站 官方网站&#xff0c;下载适用于 Wind…...