ロックを取得するとAbstractQueuedSynchronizerが中断する理由
-
03-07-2019 - |
質問
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
の呼び出しは、呼び出しスレッドに割り込みを伝播することです。
所属していません StackOverflow