首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ReentrantLock,锁无法解锁。

ReentrantLock,锁无法解锁。
EN

Stack Overflow用户
提问于 2016-04-04 13:05:13
回答 1查看 907关注 0票数 1

下面是线程被锁定之前和线程解锁后的所有信息。我正在使用lock()方法,并解锁ReentrantLock。但是,尽管某些进程已解除锁定,但另一个进程无法锁定同一锁。

EN

回答 1

Stack Overflow用户

发布于 2016-04-04 19:50:43

戴上他的占卜帽

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

每当您记录释放了这两种锁中的某些锁时,锁的字符串表示仍然包含[Locked by thread Thread-X]。如果您是从同一个线程登录,完全是在试图解锁之后,您应该会看到一个[Unlocked]后缀(参见ReentrantLock.toString())。

看起来你有一些很小但很重要的代码出错了。

最可能的情况是,您已经多次从锁的当前所有者调用ReentrantLock.lock(),并且尝试通过调用ReentrantLock.unlock()来释放锁(或者更普遍地说,调用lock()的次数少于调用的次数)。

还有其他可能的解释--例如,如果您正在吞咽所有抛出的异常,您可能试图在没有注意到的情况下从错误的线程中解锁(在这种情况下应该抛出一个IllegalMonitorStateException;我刚刚花了10分钟编写一个示例,以了解如何做到这一点)。尽管如此,这些解释比上面的解释更不可能。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36403535

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档