zsynchronizowany obiekt nie jest zablokowany przez wątek przed notifyAll ()
Chcę mieć wartość logiczną, aby powiadomić niektóre sekcje systemu o uruchomieniu określonej usługi.
Z jakiegoś dziwnego powodu otrzymuję błądjava.lang.IllegalMonitorStateException: object not locked by thread before notifyAll()
.
Dziwne jest to, że notifyAll () znajduje się wewnątrz zsynchronizowanego bloku, który przejmuje kontrolę nad obiektem, na który wywołuję notifyAll ().
Moja klasa zaczyna się tak:
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();
}
}
...
}
Pracuję nad aplikacją na Androida. Nie sądzę, aby miało to wpływ na cokolwiek, ale uzupełniam pytanie tym komentarzem w przypadku, który wpływa na sposób działania java.
Dlaczego otrzymuję wyjątek, jeśli obiekt jest zablokowany wewnątrz zsynchronizowanego bloku?