我有一段代码(简体):

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

其中reentrantLockObject是java.util.concurrent.locks.ReentrantLock。
有时我会收到IllegalMonitorStateException。
它表明在check和unlock()调用之间释放了锁定。
如何防止这种异常?

最佳答案

isLocked返回是否有任何线程持有该锁。我认为您想要isHeldByCurrentThread:

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

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

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

10-12 05:54