0
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。有人可以解释为什么会这样。

提前致谢

4

3 回答 3

4

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

在您的代码中,您已经获得了 lock on Thread.currentThread(),但是您正在调用它 on ob,这将抛出IllegalMonitorStateException

因此,您应该将同步块更改为:-

synchronized (ob) {

}
于 2012-11-27T19:24:21.940 回答
1

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

synchronized (ob) {
        try {
            ob.wait();
            ob.notify();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
于 2012-11-27T19:28:21.173 回答
0

如果即使你用 IllegalMonitorException 解决了你的问题,比如

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

你的代码不起作用。在您的代码中,每个线程都会创建一个新锁,在方法之外是不可见的。其他线程没有机会通知等待线程。

于 2012-11-27T20:56:17.880 回答