类之间关系
ReentrantLock
抽象内部静态类Sync extends AbstractQueuedSynchronizer
最终静态类FairSync extends Sync
最终静态类NonFairSync extends Sync
抽象静态类AbstractQueuedSynchronizer extends AbstractOwnableSynchronized
运作图
1、初始化状态:
2、线程T1来了,加锁(公平锁)
尝试获取锁
获取线程 current = T1;c = 0;
进入if,队列不存在线程(hasQueuedPredecessors()判断队列是否存在线程,或者当前线程是队列的首线程)
尝试CAS修改state为1获取锁。
获取成功,将T1设置为当前线程。返回true。结束。
3、线程T2来了,加锁(公平锁)
继续循环,自旋状态拿锁
一直循环要锁h或者阻塞后由 系统OS退出
4、线程T3
加锁(公平锁)
获取锁失败进入
继续循环,自旋状态拿锁
一直循环要锁h或者阻塞后由系统OS退出