java - 在没有 IllegalMonitorStateException 的情况下解锁 ReentrantLock

标签 java concurrency locking

我有一段代码(简化):

if(reentrantLockObject.isLocked()) {
       reentrantLockObject.unlock();
}

其中 reentrantLockObject 是 java.util.concurrent.locks.ReentrantLock。 有时我会得到 IllegalMonitorStateException。 它接缝在 check 和 unlock() 调用之间释放了锁。 我怎样才能防止这个异常(exception)?

最佳答案

isLocked 返回是否任何 线程持有锁。我想你想要 isHeldByCurrentThread:

if (reentrantLockObject.isHeldByCurrentThread()) {
    reentrantLockObject.unlock();
}

话虽如此,isHeldByCurrentThread 被记录为主要用于诊断目的 - 这段代码是不寻常的正确方法。你能解释一下为什么你认为你需要它吗?

关于java - 在没有 IllegalMonitorStateException 的情况下解锁 ReentrantLock,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2811236/

相关文章:

java - 我如何将字符串转换为长?

java - Hadoop如何在 "real-time"针对非陈旧数据运行?

java - 如何在 java 中比较两个 arraylist<Contacts>

mysql - 如何锁定单行

java - 使用 ParameterExpression 作为 In 子句的一部分

java - ConcurrentHashMap putIfAbsent : atomicity when followed by a get() call

python - 如何在 Python 中使用线程?

MySQL查询有时会死锁

java - 用于 4 眼检查的 hibernate 锁定对象

c# - 在任何情况下,在 ReaderWriterLockSlim 上调用 EnterWriteLock 应该进入读锁吗?