ReentrantLock源码图
2021-04-12 23:56:59 0 举报
ReentrantLock源码解析
作者其他创作
大纲/内容
sync.release(1);尝试释放锁
尝试获取失败
getState()volatile实现标记锁状态重入锁显示加锁数
doSignal(Node first)在条件队列删除第一个等待节点
tryAcquire(args)尝试获取
false
signal()从当前条件的等待队列里面唤醒一个等待最长的线程到等待锁的队列里面
new NofairSyn()创建一个非公平锁
拿到锁
获取锁失败继续等待
初始化syn引用
sync.acquire(1);尝试获得锁
线程获得了锁
lock()方法
true
nonfairTryAcquire(int acquires)非公平获取锁
unlock()释放锁
transferForSignal(Node node)转移节点到锁等待队列
AbstractQueuedSynchronizer抽象同步队列
sync.newCondition();
await()等待
new ConditionObject()创建条件对象
signalAll()唤醒当前条件的等待队列里面的所有线程并移动到锁的等待队列里面
AbstractQueuedSynchronizer。Sync锁(内部类)
newCondition() 新建条件对象
释放锁成功
AbstractQueuedSynchronizer。ConditionObject条件对象
当getState()-当前线程的要释放的锁数时
0
AbstractQueuedSynchronizer。NonfairSync非公平锁(内部类)
isHeldExclusively()判断当前拥有锁的线程是否是当前线程
acquire(int args)
selfInterrupt();获取失败线程中断
ReentrantLock()无参构造方法
获取锁状态,并与当前线程锁数相减
获取锁失败
tryRelease(int arg)
大于0
setState(int newState)重置当前锁数
ReentrantLock源码阅读
收藏
0 条评论
回复 删除
下一页