release系列方法用于实现解锁一个或多个线程,该方法可用于实现unlock。该方法首先会调用tryRelease方法,这个方法需要子类实现,尝试设置状态值以反映独占模式下的release行为。如果返回true,则需要解锁后继节点。下面我们直接看图。
该方法的核心就是当tryRelease成功后,解锁头结点的下一个为被取消的后继节点。
独占模式下就只有这样一个release方法。而在共享模式下,区别就是调用的是tryReleaseShared方法,并且在解锁后继的时候要确保release被传播。此时会判断头结点状态,如果是SIGNAL,那么就解锁后继节点。如果是0,那么设置状态为PROPAGATE。