AQS笔记

1 AQS 宏观认识一下 核心思想 如果共享资源空闲 设置为有效线程 如果被占用 进入队列等待
单向列表 效果不好 于是用了双向列表 这个列表 叫 CLH

1 sync queue 同步队列
2 condition queue 非必须 单向队列 只有用到 new Condition() 才会出现的队列 班长等人走完 才锁门
3 state 状态 只有三个位置 可以改 getState() setState() CAS

4 addWaiter 独占模式 获取资源 拿锁成功 true 失败 走5
5 addWaiter 添加到不为空的 clh
6 accquireQueued获取资源 等待被唤醒

Aqs 实现细节 现在想拿锁的 都在队列 但是 只有head-Node直接的后续节点 才有资格去尝试一下

ReentRantLock 锁重入原理 就是 cas 把state +1 变为2 +1 变为三 但是一定切记 最后state最后一点更要是0 不然无法释放

aqs 拿锁 过程

1 acquire() 去拿锁
2 用自定义 tryacquire()去拿锁
3 成功 拿到锁 方法退出
4 失败 封装成node 去clh里排队 是不是最后一个
是 死循环 一直等着 自己前面是 头节点
不是 队列是空的 建立一个队列 死循环 一直等着 自己前面是 头节点

aqs 释放资源

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值