質問

java.uti.concurrent.locks.AbstractQueuedSynchronizerのソースコードを見ていましたが、acquire()メソッドは次のようになります-

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

acquire()を呼び出すスレッドを中断するのはなぜですか?スレッドのrun()メソッドのどこかにチェックがある場合、acquire()を呼び出した後にパスする可能性があります。

上記のコードがこれを行う理由を明らかにしたい人はいますか?

役に立ちましたか?

解決

acquiredQueued のJavadocを読むと、待機中にスレッドが中断された場合にtrueが返されることがわかります。したがって、(OpenJDKソースコードで呼び出されるように) selfInterrupt の呼び出しは、呼び出しスレッドに割り込みを伝播することです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top