// interruptible 为true表示当线程的interrupted标识位被置位时
// 返回一个负数;为false表示不返回一个负数,并重新置位一次interrupted标志位
private int cancelAcquire(Node node, boolean interrupted,
boolean interruptible) {
if (node != null) {
// 将与node绑定的线程
// 将node 的状态设置为已取消
node.waiter = null;
node.status = CANCELLED;
// 若node.prev != null则说明node已经被加入到等待队列
// 此时由于node为CANCELLED状态,队列做一次清理
if (node.prev != null)
cleanQueue();
}
// 如果当前线程的interrupted被置位,则依照interruptible的值做相应的操作
if (interrupted) {
if (interruptible)
return CANCELLED;
else
Thread.currentThread().interrupt();
}
return 0;
}