java - 此代码可能会引发 IllegalMonitorStateException

标签 java multithreading exception locking synchronized-block

void waitForSignal(){
    Object ob =new Object();

    synchronized (Thred.currentThread()) {
        try {
            ob.wait();
            ob.notify();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

此方法抛出 IllegalMonitorStateException。有人可以解释一下为什么会这样吗?

提前致谢

最佳答案

您应该只对已获取锁定的对象调用 wait

在您的代码中,您已获取了 Thread.currentThread() 上的锁,但您在 ob 上调用它,这将抛出 IllegalMonitorStateException >.

因此,您应该将同步块(synchronized block)更改为:-

synchronized (ob) {

}

关于java - 此代码可能会引发 IllegalMonitorStateException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13591517/

相关文章:

java - SQLite 中逗号分隔字符串的匹配查询?

两个 Controller 类之间的 JavaFX 通信

java - 为什么每次保存父对象时子实体都会在数据库中重复

java - Android:在多线程Service中,LocalBroadcastManager安全吗?

ruby - 在此 Ruby 线程示例中使用队列而不是数组有什么意义吗?

java - OpenGL ES 2.0 和 OpenGL ES 3.0 的单一代码

c++ - 使用线程对数组的两半进行排序,但仅对后半部分进行排序

python - 从子流程中重新引发异常

java.net.SocketException : Connection Reset. 如何停止这个?

python - 除了 OSError 之外,subprocess.Popen() 还可以引发哪些异常?