主要包含:
volatile int state 标记节点锁的状态
tryacquire tryRelease 独占获取锁和释放锁 (state 0 /1 代表锁是否被占用)
tryAcquireShare 和 tryReleaseShare 共享获取锁和释放锁(state=0 代表所有的锁都被使用完,state>0 有未使用的锁)
Node的FIFO队列:
volatile Node pre 当前节点的前一个节点
volatile Node next 当前节点的下一个节点
volatile int waitStatus 当前节点的状态
volatile Thread thread 当前节点对应的的线程
Node nextWaiter Condition的等待队列(condition.await会进入此队列,signal后将会移出进入FIFO)
底层原理:
通过设置以及改变state的值,是否能设置成功,代表是否成功获取到锁。
设置state值需要为原子操作,是使用unsafe类进行CAS操作设置state值。