主要演示一下根据源代码梳理的操作流程图,核心东西都在图里了就不再过多文字描述。
获取锁过程
下一步开始acquireQueued操作,这个方法中用了一个CAS去无线循环获取锁,其中用了LockSupport.park()进行等待唤醒。
其中有两个操作的方法细节如下
- tryAcquire :执行不公平的 tryLock。 tryAcquire 在子类中实现,但两者都需要对 trylock 方法进行非公平尝试
- shouldParkAfterFailedAcquire() 检查和更新未能获取的节点的状态。 如果线程应该阻塞,则返回 true。 这是所有获取循环中的主要信号