以下是线程锁定之前和线程解锁之后的所有信息。我正在使用方法lock()和unlock()ReentrantLock。但是,尽管某些进程已解锁该锁,但另一个进程无法锁定同一锁。 最佳答案 戴上他的帽子您的日志包含对两个不同锁的引用-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();我只是花了10分钟时间编写了一个示例,以了解如何解决此问题)完成)。但是,这些解释比上述解释的可能性要小得多。关于java - Java-ReentrantLock,无法解锁锁,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36403535/
10-10 13:36