AQS
2022-06-22 16:46:13 0 举报
aqs原理
作者其他创作
大纲/内容
Y
一、响应中断特性实现:1)尝试获取锁之前判断是否有中断2)引起阻塞的park()方法会响应中断退出阻塞3)退出阻塞后判断有中断会抛出异常
tips
第一次自旋获取锁失败时,把前一个节点的waitStatus状态改为-1
公平锁
当前线程是锁的占有线程
lock方法直接通过cas尝试获取锁
tryAcquire()
acquireQueued()自旋获取锁
获取锁失败
addWaiter(Node.EXCLUSIVE)
获取锁成功
非公平锁
第二次自旋获取锁失败时,调用park()方法阻塞
tryAcquire流程和公平锁几乎一样,少了一个步骤
1、cas获取锁2、设置锁上线程为当前线程
N
独占锁
等待队列为空?or等待队列第一个是当前线程
非公平锁比公平锁少了一个判断自己是否在队列第一个的步骤,直接尝试获取锁
state加一
尝试获取锁(state==0?)
当前线程加入等待队列队尾
0 条评论
回复 删除
下一页