R eentrantLock的源码分析
以ReentrantLock作为切入点,来看看在这个场景中是如何使用AQS来实现线程的同步的
ReentrantLock的时序图
调用ReentrantLock中的lock()方法,源码的调用过程我使用了时序图来展现。
ReentrantLock.lock()
这个是reentrantLock获取锁的入口
public void lock() { sync.lock();
}
sync实际上是一个抽象的静态内部类,它继承了AQS来实现重入锁的逻辑,我们前面说过AQS是一个同步队列,它能够实现线程的阻塞以及唤醒,但它并不具备业务功能,所以在不同的同步场景中,会继承AQS来实现对应场景的功能
Sync有两个具体的实现类,分别是:
NofairSync:表示可以存在抢占锁的功能,也就是说不管当前队列上是否存在其他线程等待,新线程都有机会抢占锁
FailSync: 表示所有线程严格按照FIFO来获取锁
NofairSync.lock
以非公平锁为例,来看看lock中的实现
1. 非公平锁和公平锁最大的区别在于,在非公平锁中我抢占锁的逻辑是,不管有没有线程排队,我先上来cas去抢占一下
2. CAS成功,就表示成功获得了锁
3. CAS失败,调用acquire(1)走锁竞争逻辑
final void lock() { if (compareAndSetState(0, 1)) setExclusiveOwnerThread(Thread.currentThread()); else acquire(1);
}
R eentrantLock的源码分析相关推荐
- hashmap源码分析及常用方法测试_一点课堂(多岸学院)
HashMap 简介 底层数据结构分析 JDK1.8之前 JDK1.8之后 HashMap源码分析 构造方法 put方法 get方法 resize方法 HashMap常用方法测试 感谢 changfu ...
- NFC源码分析之R/W工作模式
文章整理总结java层,NFC读取和写入Tag的流程. 整体的时序图: 1.读取Tag的流程 NfcService启动完成后,会通过NfcService中的applyRouting方法设置对应的Dis ...
- 【安卓 R 源码】 bindService 源码分析
使用bindService主要分两种情形: 1. Service的调用者client与Service在同一个App中: 2. Service的调用者client是App1中的一个Activity,而S ...
- 【Golang源码分析】Go Web常用程序包gorilla/mux的使用与源码简析
目录[阅读时间:约10分钟] 一.概述 二.对比: gorilla/mux与net/http DefaultServeMux 三.简单使用 四.源码简析 1.NewRouter函数 2.HandleF ...
- Solr初始化源码分析-Solr初始化与启动
用solr做项目已经有一年有余,但都是使用层面,只是利用solr现有机制,修改参数,然后监控调优,从没有对solr进行源码级别的研究.但是,最近手头的一个项目,让我感觉必须把solrn内部原理和扩展机 ...
- s-sgdisk源码分析 “--set-alignment=value分区对齐参数”
文章目录 边界对齐子命令使用 源码分析 sgdisk.cc main函数入口 gptcl.cc DoOptions解析并执行具体命令函数 gpt.cc CreatePartition创建分区函数,设置 ...
- Google Mock(Gmock)简单使用和源码分析——源码分析
源码分析 通过<Google Mock(Gmock)简单使用和源码分析--简单使用>中的例子,我们发现被mock的相关方法在mock类中已经被重新实现了,否则它们也不会按照我们的期待的行为 ...
- EOS智能合约:system系统合约源码分析
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. eosio.system 概览 笔者使用的IDE是VScode,首先来看eosio.system的源码结构.如下图所示. ...
- kazoo源码分析:服务器交互的实现细节
kazoo源码分析 kazoo-2.6.1 kazoo客户端与服务器概述 上文start概述中,只是简单的概述了kazoo客户端初始化之后,调用了start方法,本文继续详细的了解相关的细节. kaz ...
最新文章
- 学习笔记-express路径问题
- [MaxCompute MapReduce实践]通过简单瘦身,解决Dataworks 10M文件限制问题
- 细胞因子风暴与新冠肺炎
- Android上传队列使用
- iPhone在华智能机市场份额首次下滑
- 三线调速风扇原理_学修电风扇~风机转速慢、调速失灵故障维修。
- 小米折叠手机高清渲染图曝光:双外折叠形态美如画
- 获取本机IP和MAC地址
- UNSW-论文以及博士论文下载
- SpringBoot系列五:SpringBoot错误处理(数据验证、处理错误页、全局异常)
- swift python 性能_Swift 性能探索和优化分析
- stylus vue 报错_带你玩转webpack 从零构建Vue工程
- Python中import的用法
- 支付宝相关服务申请入口
- 数学悖论与三次数学危机
- java企业工程项目管理系统平台源码(三控:进度组织、质量安全、预算资金成本、二平台:招采、设计管理)
- 加州欧文大学计算机工程,加州大学欧文分校计算机工程专业课程设置有哪些
- 7-1 sdust-Java-字符串集合求并集 (20 分)
- 强化学习笔记:强化学习的约束
- 快速批量压缩照片到指定大小工具,照片图片批量压缩实现方法,批量压缩工具