ReentrantLock
1.1概述
ReentrantLockz主要利用的是CAS+AQS队列来实现,它是一种独占锁、可重入锁,支持公平锁和非公平锁。
1.2AQS(abstractQueuedSynchronizer抽象队列同步器)
AQS是一个用于构建锁和同步容器的空间。AQS使用一个先进先出的队列表示排队等待的线程,队列头节点称为“哨兵节点”或者“哑节点”,它不与任何线程关联。其他的节点与等待线程关联,每个节点维护一个等待状态waitStatus。
ReentractLock的基本实现可以概况为:先通过CAS尝试获取锁,如果获取失败,则加入AQS队列并且被挂起。当锁被释放之后,排在队列队首的线程就会被唤醒,然后CAS再次尝试获取锁。