Pregunta

Estaba buscando en el código fuente de java.uti.concurrent.locks.AbstractQueuedSynchronizer y el método adquiere () se parece a esto:

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

¿Por qué interrumpe el subproceso que llama a adquisiciones ()? Si hubo una comprobación en algún lugar del método run (), entonces podría pasar después de llamar a adquirir (), lo que probablemente sea indeseable e impensado.

¿A alguien le interesa aclarar por qué el código anterior hace esto?

¿Fue útil?

Solución

Si lees el Javadoc para adquiridoQueued , te darás cuenta de que devuelve verdadero si el hilo se interrumpió mientras esperabas. Por lo tanto, la llamada a selfInterrupt (como se llama en el código fuente de OpenJDK) es propagar la interrupción al subproceso que realiza la llamada, que de otro modo se tragaría.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top