我希望有一个布尔值来通知系统中的某些部分,特定的服务已经启动。
出现了一些奇怪的错误: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的工作方式。
为什么在同步块内锁定对象时仍然出现异常?
Boolean.FALSE
进行同步,但是却在通知Boolean.TRUE
(或反之亦然)。 - Ian Roberts