我想要一个布尔值来通知系统的某些部分特定服务已启动。
出于某种奇怪的原因,我收到了错误消息java.lang.IllegalMonitorStateException: object not locked by thread before notifyAll()
。
奇怪的是 notifyAll() 位于一个同步块内,该块控制我调用 notifyAll() 的对象。
我的课是这样开始的:
public class MyService {
public static Boolean notifier = Boolean.valueOf(false);
@Override
public void start() {
synchronized (MyService.notifier) {
MyService.notifier = Boolean.valueOf(true);
MyService.notifier.notifyAll();
}
}
@Override
public void stop() {
synchronized (MyService.notifier) {
MyService.notifier = Boolean.valueOf(false);
MyService.notifier.notifyAll();
}
}
...
}
我正在开发一个安卓应用程序。我认为它不会影响任何事情,但我会用该评论来补充这个问题,以防影响 java 的工作方式。
如果对象被锁定在同步块中,为什么会出现异常?