Pergunta

Eu estava olhando para o código fonte do java.uti.concurrent.locks.AbstractQueuedSynchronizer ea aquisição () método é algo como isto -

 public final void acquire(int arg) {
    if (!tryAcquire(arg) &&
        acquireQueued(addWaiter(Node.EXCLUSIVE), arg))
        Thread.currentThread().interrupt();
}

Por que interromper a adquirir chamadas thread ()? Se houve verificação em algum lugar no método tópicos run (), então ele pode passar depois de chamar adquirir () que é provavelmente indesejável e impensados?

cuidado ninguém para lançar luz sobre por que o pedaço de código acima faz isso?

Foi útil?

Solução

Se você ler o Javadoc para acquiredQueued, você notou que ele retorna true se o segmento foi interrompido enquanto espera. Assim, a chamada para selfInterrupt (como é chamado no código fonte OpenJDK) é propagar a interrupção para o segmento de chamada, que de outra forma são engolidos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top