我从synchronized块调用notify()方法,我得到一个java.lang.IllegalMonitorStateException。我对这个特定的对象是同步的,所以我不知道我错在哪里。我的代码是这样的:
public void setSynchronizer() {
synchronized (_synchronizer) {
_synchronizer = true;
_synchronizer.notify();
}
}
有人可以帮助我吗?
答案 0 :(得分:3)
我认为_synchronizer
是Boolean
个对象。当你这样做
_synchronizer = true;
编译器将true
解析为Boolean.TRUE
引用的对象。
如果_synchronizer
之前是Boolean.FALSE
或其他Boolean
对象,那么您指的是另一个对象。您没有该对象上的监视器,因此notify()
失败。
如评论中所述,您不应在可能更改的引用(对象)上进行同步。您可以更改变量引用的对象的状态,但不能更改变量本身的引用。开始的好地方是synchronized
变量上只有final
。