Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么AbstractQueuedSynchronizer在访问锁上中断_Java_Multithreading_Concurrency_Locking - Fatal编程技术网

Java 为什么AbstractQueuedSynchronizer在访问锁上中断

Java 为什么AbstractQueuedSynchronizer在访问锁上中断,java,multithreading,concurrency,locking,Java,Multithreading,Concurrency,Locking,我正在查看java.uti.concurrent.locks.AbstractQueuedSynchronizer的源代码,acquire方法如下所示- public final void acquire(int arg) { if (!tryAcquire(arg) && acquireQueued(addWaiter(Node.EXCLUSIVE), arg)) Thread.currentThread().interrupt();

我正在查看java.uti.concurrent.locks.AbstractQueuedSynchronizer的源代码,acquire方法如下所示-

 public final void acquire(int arg) {
    if (!tryAcquire(arg) &&
        acquireQueued(addWaiter(Node.EXCLUSIVE), arg))
        Thread.currentThread().interrupt();
}
为什么它会中断线程调用acquire?如果threads run方法中有check,那么它可能会在调用acquire后通过,这可能是不需要的,也是没有考虑到的


有人想解释一下上面的代码为什么会这样做吗?

如果您阅读acquiredQueued的Javadoc,您会注意到,如果线程在等待时被中断,它将返回true。因此,在OpenJDK源代码中调用selfInterrupt是为了将中断传播到调用线程,否则会被吞没。

如果您阅读acquiredQueued的Javadoc,您会注意到,如果线程在等待时被中断,则返回true。因此,在OpenJDK源代码中调用selfInterrupt是为了将中断传播到调用线程,否则会被吞没