ReentrantLock

news/2025/3/30 17:41:57/

ReentrantLock为可重入锁,底层是AQS实现的.

ReentrantLock有两种模式,一种是公平锁,一种是非公平锁

公平锁下等待线程入队后会严格按照队列顺序执行

非公平锁模式下等待线程入队列后有可能会出现插队情况
 

公平锁

第一步:获取状态的state的值

        如果state = 0即代表锁没有被其他线程占用,执行第二步

        如果state != 0则代表锁正在被其他线程占用,执行第三步

第二步:判断队列中是否有线程在排队等待

        如果不存在则直接将锁的所有者设置成当前线程,且更新状态state.

        如果存在就入队

第三步:判断锁的所有者是不是当前线程

        如果是则更新状态state的值

        如果不是,线程进入队列等待

 非公平锁

获取状态的state的值

        如果state=0即代表锁没有被其他线程占用,则设置当前锁的持有者为当前线程,该操作用CAS完成

        如果不为0或者设置失败,代表锁被占用进行下一步

此时获取state的值

        如果是,则给state + 1,获取锁

        如果不是,则进入队列等待

        如果是0,代表刚好线程释放了锁,此时将锁的持有者设为自己

        如果不是0,则查看线程持有者是不是自己


http://www.ppmy.cn/news/1583498.html

相关文章

easyExcel2.2.10中为0数据显示为空

在 EasyExcel 2.2.10 中,如果希望将数值为 0 的数据在 Excel 中显示为空(即不显示 0),可以通过以下方法实现: 1. 使用 ExcelProperty 的 format 参数 通过设置单元格格式为 #(# 会忽略 0)&…

字节跳动春招研发部笔试题解

字节跳动春招研发部笔试题 1.万万没想到之聪明的编辑 我叫王大锤,是一家出版社的编辑。我负责校对投稿来的英文稿件,这份工作非常烦人,因为每天都要去修正无数的拼写错误。但是,优秀的人总能在平凡的工作中发现真理。我发现一个发…

力扣32.最长有效括号(栈)

32. 最长有效括号 - 力扣&#xff08;LeetCode&#xff09; 代码区&#xff1a; #include<stack> #include<string> /*最长有效*/ class Solution { public:int longestValidParentheses(string s) {stack<int> st;int ans0;int ns.length();st.push(-1);fo…

第十三章:优化内存管理_《C++性能优化指南》_notes

优化内存管理 一、内存管理基础概念二、自定义分配器三、智能指针优化重点知识代码示例&#xff1a;智能指针性能对比 四、性能优化关键点总结多选题设计题答案与详解多选题答案设计题示例答案&#xff08;第1题&#xff09; 一、内存管理基础概念 重点知识 动态内存分配开销…

go的参数传递都是值传递,但切片需要注意

根据之前学习python和java的经验&#xff0c;每次学习一门新语言时&#xff0c;一定要搞清楚方法的参数传递是值传递&#xff0c;引用传递还是指针传递。 主要原因就是需要知道&#xff0c;某种类型的数据传递给某个方法后&#xff0c;方法里面对它的修改是否会影响到这个数据本…

支付宝关键词排名优化策略:提升小程序曝光的关键

在支付宝平台&#xff0c;关键词排名对于小程序的曝光度和用户获取至关重要。精准的关键词策略可以帮助小程序在搜索结果中获得更高的排名&#xff0c;从而吸引更多的潜在用户。本文将详细解析支付宝关键词排名优化的核心策略和实施步骤&#xff0c;助力您的小程序在激烈的市场…

C++智能指针万字详细讲解(包含智能指针的模拟实现)

在笔试&#xff0c;面试中智能指针经常出现&#xff0c;如果你对智能指针的作用&#xff0c;原理&#xff0c;用法不了解&#xff0c;那么可以看看这篇博客讲解&#xff0c;此外本博客还简单模拟实现了各种指针&#xff0c;在本篇的最后还应对面试题对智能指针的知识点进行了拓…

字典树与01trie

字典树简介 当我们通过字典查一个字或单词的时候&#xff0c;我们会通过前缀或关键字的来快速定位一个字的位置&#xff0c;进行快速查找。 字典树就是类似字典中索引表的一种数据结构&#xff0c;能够帮助我们快速定位一个字符串的位置。 字典树是一种存储字符串的数据结构…