gpt4 book ai didi

Java - ReentrantLock,锁无法解锁

转载 作者:太空宇宙 更新时间:2023-11-04 12:45:10 25 4
gpt4 key购买 nike

下面是线程被锁定之前和线程解锁之后的所有信息。我正在使用 ReentrantLock 的 lock() 和 unlock() 方法。然而,虽然某个进程已经解锁了该锁,但另一个进程却无法锁定同一个锁。

enter image description here

最佳答案

戴上占卜帽

您的日志包含对两个不同锁的引用 -java.util.concurrent.locks.ReentrantLock@1624f737 和 java.util.concurrent.locks.ReentrantLock@17b002cd 。您的问题并没有很清楚地说明您到底在做什么以及拥有两个锁是否是故意的,但让我们假设它是故意的。

每当您记录已释放两个锁中的某些锁时,该锁的字符串表示形式仍包含[Locked by thread Thread-X]。如果您从同一个线程进行日志记录,那么在尝试解锁锁之后,您应该会看到 [Unlocked] 后缀(请参阅 the Javadoc of ReentrantLock.toString() )

看来您有一些小但非常重要的代码错误。

很可能,您已从锁的当前所有者处多次调用 ReentrantLock.lock(),并且尝试通过单次调用 ReentrantLock.unlock() 来释放锁(或者更一般地说,少于您调用 lock() 的次数)。

还有其他可能的解释 - 例如如果您吞下所有抛出的异常,则可能会在没有注意到的情况下尝试从错误的线程解锁(在这种情况下应该抛出 IllegalMonitorStateException ;我刚刚花了 10 分钟有趣地编写了一个示例来看看如何完成此操作)。尽管如此,这些解释的可能性比上面的解释要小得多。

关于Java - ReentrantLock,锁无法解锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36403535/

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