Java 为什么AbstractQueuedSynchronizer在访问锁上中断
我正在查看java.uti.concurrent.locks.AbstractQueuedSynchronizer的源代码,acquire方法如下所示-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();
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是为了将中断传播到调用线程,否则会被吞没