Я понимаю, что эта тема обсуждалась во многих местах. Но все они говорят об использовании в многопоточной среде.Уведомление ограничено синхронизированной конструкцией
В следующем примере почему notify()
должен быть окружен synchronized
? Это напрасно, когда используется ключевое слово, которое оно должно делать. Но почему исключение, java.lang.IllegalMonitorStateException
, когда оно не используется?
public class HelloWorld {
public static void main(String[] args) {
ABC c = new ABC();
c.put(0);
}
}
class ABC {
public synchronized void put(int value) { // why synchronized now!
System.out.println("Put: " + value);
notify();
}
}
'notify()' не имеет цели в однопоточной среде. –
http://stackoverflow.com/questions/2779484/why-must-wait-always-be-in-synchronized-block – FaNaJ