53.ReentrantLock原理

ReentrantLock使用

ReentrantLock 实现了Lock接口, 内置了Sync同步器继承了AbstractQueuedSynchronizer。

Sync是抽象类,有两个实现NonfairSync非公平,FairSync公平。

所以ReentrantLock有公平锁和非公平锁。默认是非公平锁。

public static void main(String[] args) {ReentrantLock reentrantLock = new ReentrantLock();reentrantLock.lock();try {}finally {reentrantLock.unlock();}}

 ReentrantLock构造器是使用的非公平同步器

 

 ReentrantLock的lock加锁方法

lock方法的具体实现 

 

 CAS尝试0->1,设置owner为当前线程。如果失败

进入tryAcquire逻辑,进入addWaiter逻辑,构造Node队列

Node队列是一个双向链表,有header节点、tail节点,

ReentrantLock的unlock解锁方法

这里的解锁方法逻辑里面,包含有锁可重入功能。

ReentrantLock的tryLock实现锁的可重入

 锁重入功能-加锁

锁重入功能-解锁 

ReentrantLock不可打断模式

ReentrantLock可打断模式

条件变量await&signal方法

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

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

相关文章

线性预测器的等价性

摘要 尽管线性模型很简单,但它在时间序列预测中表现良好,即使是在与更深入、更昂贵的模型竞争时也是如此。已经提出了许多线性模型的变体,通常包括某种形式的特征归一化,以提高模型的泛化。本文分析了用这些线性模型体系结构可表…

Mysql使用中的性能优化——索引数对插入操作性能的影响

表的索引可以给数据检索提升效率,但是也给表的增删改操作带来代价。本文我们将关注,索引数量对INSERT操作的影响。 结论 索引数的新增会造成INSERT操作效率下降,约每增一个索引会降低10%效率。 实验数据 可以看到0个索引的效率是7个索引效…

【C++题解】1265. 爱因斯坦的数学题

问题:1265. 爱因斯坦的数学题 类型:简单循环 题目描述: 爱因斯坦出了一道这样的数学题:有一条长阶梯,若每步跨 2 阶,则最最后剩一阶,若每步跨 3 阶,则最后剩 2 阶,若每…

分布式事务大揭秘:使用MQ实现最终一致性

本文作者:小米,一个热爱技术分享的29岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“软件求生”,获取更多技术干货! 大家好,我是小米,一个热爱分享技术的29岁程序员,今天我们来聊聊分布式事务中的一种经典实现方式——MQ最终一致性。这是一个在互联网公司中广…

Wow Tab插件,一款能让你的Edge浏览器开挂的插件,微软官方出品

首先问你个问题,你的浏览器起始页是什么样的界面?是默认的界面还是极简的界面?又或者是既简洁又功能丰富的新型起始页呢?如果你的起始页是浏览器默认的,从来都没有更改过的话,建议你可以尝试一些第三方的起…

6.切蛋糕

上海市计算机学会竞赛平台 | YACSYACS 是由上海市计算机学会于2019年发起的活动,旨在激发青少年对学习人工智能与算法设计的热情与兴趣,提升青少年科学素养,引导青少年投身创新发现和科研实践活动。https://www.iai.sh.cn/problem/71 题目描述 一个圆型的蛋糕,切 𝑛n 刀…

【C++第九课 - vector】vector介绍、vector使用,vector的底层实现、杨辉三角、全排列、只出现一次的数字

目录 一、vector的介绍二、vector的使用1、vector的构造函数2、vector的插入和三种遍历方式3、开空间4、insert5、find6、erase补充 三、vector的底层实现1、成员变量2、构造函数3、push_back4、访问方式5、pop_back6、insert - pos位置插入x7、resize8、拷贝构造9、赋值10、er…

工具:Linux如何挂载NTFS移动硬盘

从windows平台迁移数据至Linux平台,有时候会用到NTFS文件系统的硬盘,但Linux的file system一般又无法直接兼容NTFS系统。这个就需要用到ntfs-3g插件。 NTFS-3G是一个开源项目, NTFS-3G是为Linux, Android, Mac OS X, FreeBSD, NetBSD, OpenSo…

玩转Matlab-Simscape(初级)- 09 - 在Simulink中创建曲柄滑块机构的控制模型

** 玩转Matlab-Simscape(初级)- 09 - 在Simulink中创建曲柄滑块机构的控制模型 ** 目录 玩转Matlab-Simscape(初级)- 09 - 在Simulink中创建曲柄滑块机构的控制模型 前言一、问题描述二、创建模型2.1 识别机构中的刚体2.2 确定刚…

【机器学习】消息传递神经网络(MPNN)在分子预测领域的医学应用

1. 引言 1.1. 分子性质预测概述 分子性质预测是计算机辅助药物发现流程中至关重要的任务之一,它在许多下游应用如药物筛选和药物设计中发挥着核心作用: 1.1.1. 目的与重要性: 分子性质预测旨在通过分子内部信息(如原子坐标、原…

11.Spring AOP

文章目录 1.什么是 Spring AOP?2.为什要用 AOP?3.Spring AOP 应该怎么学习呢?3.1 AOP 组成3.1.1 切⾯(Aspect) 切点 通知3.1.2 连接点(Join Point)3.1.3 切点(Pointcut)…

《python程序语言设计》2018版第5章第46题均值和标准方差-下部(本来想和大家说抱歉,但成功了)

接上回,5.46题如何的标准方差 本来想和大家说非常抱歉各位同学们。我没有找到通过一个循环完成两个结果的代码。 但我逐步往下的写,我终于成功了!! 这是我大前天在单位找到的公式里。x上面带一横是平均值。 我不能用函数的办法…

腾讯医疗大模型,不止大模型

“千呼万唤始出来,腾讯健康终于祭出医疗大模型。但或许这只是新故事的开始。下一步通过应用场景的打磨,全面嵌入生态合作伙伴,才能让医疗行业加速全面拥抱「数智化」工具。 在今年几乎所有企业都卷入AI大模型这场豪赌时,腾讯健康…

Pod之间的通信详解

在Kubernetes集群中,Pod之间的通信是非常核心的功能。Pod是Kubernetes中的最小部署单元,它们之间经常需要进行通信以完成各种任务。本文将深入探讨Pod之间的通信方式,并通过示例代码来进一步解释。 目录 第一章. Pod间通信的实现原理 第二章…

C++做题

我们可以将0——9看成一个一维数组&#xff1a;a[11] #include<cstdio> int a[11],n; int x,p; int main(){scanf("%d",&n);for(int i1;i<n;i){pi;while(p!0){xp%10;a[x];//让下标x每次出现时增加1(描述不清楚)p/10;}}for(int i0;i<9;i){printf(&qu…

IO多路复用详解

1. 概念 IO多路复用也称IO多路转接&#xff0c;它是一种网络通信的手段&#xff08;机制&#xff09;&#xff0c;通过这种方式可以同时监测多个文件描述符并且这个过程是阻塞的&#xff0c;一旦检测到有文件描述符就绪&#xff08; 可以读数据或者可以写数据&#xff09;程序的…

轻NAS玩客云使用Docker部署小雅并挂载到AList详细流程分享

文章目录 前言1. 本地部署AList2. AList挂载网盘3. 部署小雅alist3.1 Token获取3.2 部署小雅3.3 挂载小雅alist到AList中 4. Cpolar内网穿透安装5. 创建公网地址6. 配置固定公网地址 前言 本文主要介绍如何在安装了CasaOS的玩客云主机中部署小雅AList&#xff0c;并在AList中挂…

C语言基础学习之位运算

枚举类型 enum 枚举名 { 枚举常量 //名字 }; 注意: 1.c语言中 对于枚举类型 实际上是 当作整型处理的 2.提高代码可读性&#xff0c; 写成枚举&#xff0c;可以做语法检查 3.枚举常量&#xff0c;之间用逗号隔开 4.枚举常量&#xff0c;可以给初值&#xff0c;给了初值之后&…

当我拿到百度文心智能体大赛top1后,我又开发了...

目录 一、写在前面 二、代码助手 三、关于智能体 四、写在后面 一、写在前面 在不久前结束的文心智能体大赛&#xff08;第一期&#xff09;中&#xff0c;我有幸凭借一款名为恋爱助手的智能体斩获了大赛的桂冠。这个成绩&#xff0c;既是对我努力的认可&#xff0c;也是对…

人工智能_机器学习096_PCA主成分分析降维算法_PCA降维原理_介绍和使用_模式识别_EVD特征值分解_SVD奇异值分解---人工智能工作笔记0221

首先我来看PCA降维,可以看到在图像处理中经常用到PCA,经过对数据进行降维可以去除数据噪声,发现数据中的模式,也就是 发现数据的规律. 这里的模式识别就是 机器学习中的一个分支 就是在数据中找规律的意思 我们使用代码看一下 from sklearn.docomposition import PCA from skl…