Прямо сейчас, я готовлю сертификацию java ocajp 8 и просто просматриваю несколько дампов, и он говорит, что следующий код вызывает IllegalStateException;IllegalStateException с wait(), notify()
и код below`
void waitForSignal() throws Exception{
Object obj = new Object();
synchronized (Thread.currentThread()) {
obj.wait();
obj.notify();
}
}`
Предшествующий код все это при условии, и ничего другого, почему здесь возникает исключение и в том, что я знаю немного о многопоточности. и в соответствии с документацией Java
IllegalStateException: Сигналы, что метод был вызван на незаконное или несоответствующее время. Другими словами, среда Java или приложение Java не находятся в соответствующем состоянии для запрошенной операции.
Так я полагаю, ожидание() или уведомить() вызывается в неподходящее время ... если я не ошибаюсь, почему это незаконно время, и если я не прав, то объясните, почему возникает исключение ..
Я боюсь, что многопоточность в Java не является чем-то, что можно узнать с помощью проб и ошибок. (Или, по крайней мере, это требует много проб.) В этом случае проблема в том, что у вас нет монитора 'obj'. – biziclop
Как в стороне, синхронизация по объекту Thread является очень плохой идеей. – biziclop
@biziclop Итак, мы можем вызвать wait или notify на каком-либо объекте, когда у нас есть блокировка на этом объекте, но здесь мы заблокировали какой-то объект потока, так что это причина для unlateexception? исправьте меня, если я ошибаюсь – viru