下面是线程被锁定之前和线程解锁后的所有信息。我正在使用lock()方法,并解锁ReentrantLock。但是,尽管某些进程已解除锁定,但另一个进程无法锁定同一锁。
发布于 2016-04-04 19:50:43
戴上他的占卜帽
日志包含对两种不同锁的引用-- java.util.concurrent.locks.ReentrantLock@1624f737
和java.util.concurrent.locks.ReentrantLock@17b002cd
。您的问题并没有很清楚地说明您到底在做什么,是否有两个锁是有意的,但是让我们假设是的。
每当您记录释放了这两种锁中的某些锁时,锁的字符串表示仍然包含[Locked by thread Thread-X]
。如果您是从同一个线程登录,完全是在试图解锁之后,您应该会看到一个[Unlocked]
后缀(参见ReentrantLock.toString()
)。
看起来你有一些很小但很重要的代码出错了。
最可能的情况是,您已经多次从锁的当前所有者调用ReentrantLock.lock()
,并且尝试通过调用ReentrantLock.unlock()
来释放锁(或者更普遍地说,调用lock()
的次数少于调用的次数)。
还有其他可能的解释--例如,如果您正在吞咽所有抛出的异常,您可能试图在没有注意到的情况下从错误的线程中解锁(在这种情况下应该抛出一个IllegalMonitorStateException
;我刚刚花了10分钟编写一个示例,以了解如何做到这一点)。尽管如此,这些解释比上面的解释更不可能。
https://stackoverflow.com/questions/36403535
复制相似问题