final boolean acquireQueued(final Node node, int arg) {
boolean failed = true;
try {
boolean interrupted = false;
for (;;) {
final Node p = node.predecessor();
if (p == head && tryAcquire(arg)) {
setHead(node);
p.next = null; // help GC
failed = false;
return interrupted;
}
if (shouldParkAfterFailedAcquire(p, node) && parkAndCheckInterrupt())
interrupted = true;
}
} finally {
if (failed)
cancelAcquire(node);
}
}
Когда я читаю исходный код AbstractQueuedSynchronizer из Jdk1.8, я долго думаю о методе acquQueued в AbstractQueuedSynchronizer. При каком условии, вызов будет вводить блок 'finally' и метод cancelAcquire?Прыжок из цикла должен быть логикой возврата, в которой для «неудачи» было установлено значение «ложь».