繁体   English   中英

此代码可以引发IllegalMonitorStateException

[英]This Code can Throw an IllegalMonitorStateException

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 (ob) {

}

您要在等待的对象上进行同步:

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

如果您甚至通过IllegalMonitorException解决了问题,例如

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

您的代码将无法正常工作。 在您的代码中,每个线程都会创建一个新的锁,该锁在方法外部是不可见的。 其他线程没有机会通知正在等待的线程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM