关于notify()调用的IllegalMonitorStateException

时间:2013-11-25 15:31:28

标签: java

我从synchronized块调用notify()方法,我得到一个java.lang.IllegalMonitorStateException。我对这个特定的对象是同步的,所以我不知道我错在哪里。我的代码是这样的:

public void setSynchronizer() {
    synchronized (_synchronizer) {
        _synchronizer = true;
        _synchronizer.notify();
    }       
}

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:3)

我认为_synchronizerBoolean个对象。当你这样做

_synchronizer = true;

编译器将true解析为Boolean.TRUE引用的对象。

如果_synchronizer之前是Boolean.FALSE或其他Boolean对象,那么您指的是另一个对象。您没有该对象上的监视器,因此notify()失败。

如评论中所述,您不应在可能更改的引用(对象)上进行同步。您可以更改变量引用的对象的状态,但不能更改变量本身的引用。开始的好地方是synchronized变量上只有final