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?

questionAnswers(1)

yourAnswerToTheQuestion