java - ReentrantLock 异常

标签 java android multithreading

我正在为 Android 2.2 开发,对 ReentrantLocks 的工作原理有点困惑。以下代码是否会抛出 IllegalMonitorStateException?我问是因为我看不出它是如何做到的——根据 API,当且仅当成功获得锁时,tryLock 返回 true——但 unlock() 命令偶尔会返回 true。

public void lockDemo() {
    ReentrantLock myLock = new ReentrantLock();
    if (myLock.tryLock()) {
        System.out.println("Lock obtained");
        myLock.unlock();
    }
}

最佳答案

来自 javadoc:如果当前线程不持有锁,unlock() 将抛出 IllegalMonitorStateException。我猜你不会问,除非你看到这个,但是,你应该检查堆栈跟踪以查看触发它的方法。你给出的例子不会重现这种情况,所以你的真实代码一定更复杂,问题一定出在其他地方。

在我的脑海中,我可以想象这把锁实际上可能以某种方式被解锁了两次。或者在某些认为自己拥有锁的代码路径中实际上可能没有成功获取锁。

关于java - ReentrantLock 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3213360/

相关文章:

c++ - 有没有办法从 QML WorkerScript 运行 C++?

iOS线程: does this ensure the completion to be called from the main thread?

java - 错误 : The processing instruction target matching "[xX][mM][lL]" is not allowed

java - 如何分析 PermGen 的内容?

Android AnimatorSet 动画 + setStartDelay VS AnimatorListenener.onAnimationStart?

java - 为对话框添加额外内容

c++ - 使用线程的段错误

java - 除了动态类型,是什么让 Ruby "more flexible"比 Java 更好?

java - 修剪字符串删除超过需要

android - 如何在Android Studio中的 Activity 底部制作Android xml Linearlayout?