我有一段代码(简体):
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/