gpt4 book ai didi

java - 为什么 AbstractQueuedSynchronizer 在获取锁时中断

转载 作者:行者123 更新时间:2023-11-29 04:05:03 24 4
gpt4 key购买 nike

我正在查看 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。因此,对 selfInterrupt 的调用(在 OpenJDK 源代码中是这样调用的)是将中断传播到调用线程,否则会被吞噬。

关于java - 为什么 AbstractQueuedSynchronizer 在获取锁时中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/207946/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com