Я хочу иметь логическое значение для уведомления некоторых разделов системы о запуске определенной службы.
По какой-то странной причине я получаю сообщение об ошибке 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();
}
}
...
}
Я работаю над приложением для Android. Я не думаю, что это должно на что-то повлиять, но я дополняю вопрос этим комментарием на случай, если это повлияет на работу Java.
Почему я получаю исключение, если объект заблокирован внутри синхронизированного блока?
Boolean.FALSE
, но уведомляетеBoolean.TRUE
(или наоборот). - person Ian Roberts   schedule 28.12.2012final
Ваш код намного сложнее, чем должен быть, но я не могу предложить, чем его заменить, не видя, что вы этого ждете. (в нынешнем виде вы можете удалить все это) Я подозреваю, что ExecutorService - это то, что вам следует использовать. - person Peter Lawrey   schedule 28.12.2012