Я вызываю метод notify() из синхронизированного блока, и я получаю java.lang.IllegalMonitorStateException. Я синхронизирован по этому конкретному объекту, поэтому я не вижу, где я ошибаюсь. Мой код таков:IllegalMonitorStateException on notify() call
public void setSynchronizer() {
synchronized (_synchronizer) {
_synchronizer = true;
_synchronizer.notify();
}
}
Может кто-нибудь мне помочь, пожалуйста?
Это место, где примечание, что синхронизация на изменяемой переменной не является хорошей идеей, обычно должна быть добавлена. – Holger
+1 «использовать« synchronized »только для« конечных »переменных» - хорошая мантра. Мне еще предстоит найти веские причины отклониться от этого правила. –
Спасибо! Ваши комментарии мне очень помогли. Проблема заключалась в том, что назначение «_синхронизатор = истина»; назначил новый объект _синхронизатору, поэтому синхронизация уже недействительна. Я изменил _syncronizer на Boolean []. Новое состояние назначается _syncronizer [0], поэтому объект остается прежним. – user3032925