1

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() を呼び出した後に合格する可能性がありますが、これはおそらく望ましくなく、考えられていませんか?

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

4

1 に答える 1

4

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

于 2008-10-16T09:44:34.197 に答える