码农知识堂 - 1000bd
Python
PHP
JS/TS
JAVA
C/C++
C#
GO
Kotlin
Swift
AQS中lock源码解析
什么是AQS?
就是基于双向链表+CAS实现的锁的一种机制或者方法思想。
就是AbstractQueuedSynchronizer,是Java并发包下的一个基类
基于AQS实现的同步器包括:ReentrantLock、CountDownLatch、Samaphone、FutureTask、ReentrantWriteLock
AbstractQueuedSynchronizer源码解析(基于ReentrantLock的非公平锁)
AQS类中核心的属性:定义内部类--双向链表Node对象,一个头节点head,一个尾节点tail,一个用来标识锁的次数的状态state。如下图:
AQS中lock动作的核心方法
从AQS队列中获取锁资源
将当前节点添加到AQS双向链表尾部
初始化AQS队列,向其初始化一个空的head节点,并将当前节点放入AQS队列尾部
找到当前节点之前有效的第一个节点,将中间无效节点干掉
基于Unsafe类的park方法挂起当前线程
取消请求锁资源
唤醒下一个节点
基于CAS对AQS中的属性进行更新
ReentrantLock的核心属性和方法
ReentrantLock类核心结构
lock方法
内部类--Sync(定义锁和获取锁资源方法)
抽象的lock方法
非公平锁获取锁资源方法--nofairTryAcquire
内部类--FairSync(继承Sync)
lock
tryAcquire
内部类--NonFairSync(继承Sync)
lock
tryAcquire
lock总体流程调用思路图
类图
源码流程图
感觉有
帮到
你的话,点个赞吧!靓仔
原创不易,转载请说明出处!
相关阅读:
数据分析报告这样写,才算真正读懂了数据
多智能体系统集群协同控制实验平台详解与典型案例
Docker常用命令
MindSpore:有关卷积层的问题
web前端期末大作业:基于HTML+CSS+JavaScript制作我的音乐网站(带设计报告)
java面向对象之封装-抽象-继承-组合-多态五种概念一网打尽
Vue+iview将表格table以excel文件导出的几种方式
选择合适的 MQTT 云服务:一文了解 EMQX Cloud Serverless、Dedicated 与 BYOC 版本
润开鸿与蚂蚁数科达成战略合作,发布基于鸿蒙的mPaaS移动应用开发产品
初学者如何学习键盘编程
原文地址:https://blog.csdn.net/weixin_38289303/article/details/133937692
最新文章
攻防演习之三天拿下官网站群
数据安全治理学习——前期安全规划和安全管理体系建设
企业安全 | 企业内一次钓鱼演练准备过程
内网渗透测试 | Kerberos协议及其部分攻击手法
0day的产生 | 不懂代码的"代码审计"
安装scrcpy-client模块av模块异常,环境问题解决方案
leetcode hot100【LeetCode 279. 完全平方数】java实现
OpenWrt下安装Mosquitto
AnatoMask论文汇总
【AI日记】24.11.01 LangChain、openai api和github copilot
热门文章
十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
奉劝各位学弟学妹们,该打造你的技术影响力了!
五年了,我在 CSDN 的两个一百万。
Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
面试官都震惊,你这网络基础可以啊!
你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
心情不好的时候,用 Python 画棵樱花树送给自己吧
通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
13 万字 C 语言从入门到精通保姆级教程2021 年版
10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系
2656653265@qq.com
京ICP备2022015340号-1
正则表达式工具
cron表达式工具
密码生成工具
京公网安备 11010502049817号