public final boolean release(int arg)在unlock方法的实现中,使用了同步器的release方法。相对于在之前的acquire方法中可以得出调用acquire,保证能够获取到锁(成功获取状态),而release则表示将状态设置回去,也就是将资源释放,或者说将锁释放。
[url=][/url]
1 public final boolean release(int arg) {2 if (tryRelease(arg)) {3 Node h = head;4 if (h != null && h.waitStatus != 0)5 unparkSuccessor(h);6 return true;7 }8 return false;9 }[url=][/url]
// 如果没有满足状态,从尾部开始找寻符合要求的节点并将其唤醒 Node s = node.next; if (s == null || s.waitStatus > 0) {05 s = null;06 for (Node t = tail; t != null && t != node; t = t.prev)07 if (t.waitStatus <= 0)08 s = t;09 }10 if (s != null)11 LockSupport.unpark(s.thread);12 }[url=][/url]