码农知识堂 - 1000bd
Python
PHP
JS/TS
JAVA
C/C++
C#
GO
Kotlin
Swift
ReentrantLock
ReentrantLock
内部继承了AQS
AQS类主要就是一个State和一个双向队列
CAS修改state值去获取锁
Node就是队列中的节点包含了几个重要标识
EXCLUSIVE
排它锁标识
CANCELLED=1
失效了
SIGNAL=-1
后继节点需要被唤醒
相比synchronized,ReentrantLock增加了一些高级功能
lock.lockInterruptibly()等待可中断
ReentrantLock(boolean fair)可实现公平锁,默认是非公平的
可实现选择性通知
需要借助于Condition接口与newCondition()方法
常用方法
lock()
acquire()
公平锁入口方法
tryAcquire()
尝试获取锁,失败了,则封装成一个Node去双向队列排队
addWaiter
获取锁失败,创建并设置他的前节点,设置当前线程,等待
acquireQueued
已经将Node加入到了双向队列,然后执行当前方法
判断是不是头结点,尝试获取锁资源
unlock()
独占锁、可重入锁
公平锁与非公平锁区别
非公平锁在调用 lock 后,首先就会调用 CAS 进行一次抢锁,如果这个时候恰巧锁没有被占用,那么直接就获取到锁返回了。
非公平锁在 CAS 失败后,和公平锁一样都会进入到 tryAcquire 方法,在 tryAcquire 方法中,如果发现锁这个时候被释放了(state == 0),非公平锁会直接 CAS 抢锁,但是公平锁会判断等待队列是否有线程处于等待状态,如果有则不去抢锁,乖乖排到后面
相关阅读:
6-7 宠物领养开发及相关代码
绝对路径和相对路径
Vue18 v-for指令 展示列表数据
[unity]三角形顶点顺序
ICPC-2022网络赛第二场
SQL中先排序再筛选与先筛选再排序
【MySQL】一文学会所有MySQL基础知识以及基本面试题
您的计算机已被[new_day@torguard.tg].faust 勒索病毒感染?恢复您的数据的方法在这里!
计蒜客详解合集(1)期
K8s的Pod详细解析
原文地址:https://blog.csdn.net/qq_40011574/article/details/127273297
最新文章
攻防演习之三天拿下官网站群
数据安全治理学习——前期安全规划和安全管理体系建设
企业安全 | 企业内一次钓鱼演练准备过程
内网渗透测试 | 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号