当前位置:网站首页>ReentrantLock原理(未完待续)
ReentrantLock原理(未完待续)
2022-07-31 19:21:00 【斯沃福德】
1. 概述
ReentrantLock底层基于AQS,其构造方法返回的就是NonfaireSync和faireSync;
两种同步器都继承自Sync,Sync又继承自AQS!

new ReentrantLock时,返回的就是同步器,默认是非公平的;
2. 非公平锁的加锁
2. 1 加锁成功
调用lock() 方法,使用CAS机制尝试将AQS底层 volatile修饰的 state 属性改为1,若成功即加锁;
若失败即出现竞争,则进入acquire() 方法;
2. 2 加锁失败
- 当锁已经被占用,共享内存中的 state属性是1,compareAndSet(0,1) 会失败,CAS更改state属性失败,会进入 acquire() 方法;
- 进入else中 AQS的 acquire() 方法;
- 调用 tryAcquire() 再次尝试,结果为false,取反就是true,再执行acquireQueued() ,会创造一个Node节点对象关联线程,放到FIFO等待队列(双向链表)中;
- 节点进入队列后,会循环尝试加锁,失败后会被park阻塞,节点的waitStatus 会被置为 -1,后续会由前序节点来唤醒这个节点;
AQS中的acquire()方法:
假设多个线程多竞争失败,进入了FIFO等待队列:
2. 非公平锁的释放
2.1 竞争成功
- 调用 unlock() 方法,底层调用了release() 方法,使用tryRelease() 将state置为0即释放锁;
- tryRelease() 返回true后,判断head哨兵节点是否为null ,如果否且哨兵节点的waitStatus 也不会0(为-1),则哨兵节点的后继节点被unParkSuccessor 唤醒 !然后这个后继节点会从FIFO队列中移除;


2.1 竞争失败
边栏推荐
猜你喜欢

每日练习------随机产生一个1-100之间的整数,看能几次猜中。要求:猜的次数不能超过7次,每次猜完之后都要提示“大了”或者“小了”。

2022年Android 面经总结(附含面试题 | 源码 | 面试资料)

这位985教授火了!当了10年博导,竟无一博士毕业!

35道MySQL面试必问题图解,这样也太好理解了吧

Unity 之 音频类型和编码格式介绍

Introduction to Audio Types and Encoding Formats in Unity

【NLP】什么是模型的记忆力!

全平台GPU通用AI视频补帧超分教程

OSPFv3的基本配置

全网一触即发,自媒体人的内容分发全能助手——融媒宝
随机推荐
Book of the Month (202207): The Definitive Guide to Swift Programming
How can we improve the real yourself, become an excellent architect?
Thymeleaf是什么?该如何使用。
MySQL - single function
1161. Maximum Sum of Elements in Layer: Hierarchical Traversal Application Problems
移动web开发02
MySQL---aggregate function
广汽本田安全体验营:“危险”是最好的老师
常用的安全渗透测试工具(渗透测试工具)
useragent在线查找
This 985 professor is on fire!After 10 years of Ph.D. supervisor, no one has graduated with a Ph.D.!
2022年Android 面经总结(附含面试题 | 源码 | 面试资料)
Introduction of Jerry voice chip ic toy chip ic_AD14NAD15N full series development
35道MySQL面试必问题图解,这样也太好理解了吧
Write a database document management tool based on WPF repeating the wheel (1)
Istio介绍
杰理语音芯片ic玩具芯片ic的介绍_AD14NAD15N全系列开发
给定一个ip地址,子网掩码怎么算网络号(如何获取ip地址和子网掩码)
How to change npm to Taobao mirror [easy to understand]
高通cDSP简单编程例子(实现查询高通cDSP使用率、签名),RK3588 npu使用率查询