class Test {
public static void main(String[] args) {
System.out.println("1.. ");
synchronized (args) {
System.out.println("2..");
try {
Thread.currentThread().wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("3..");
}
}
}
Я получаю IllegalMonitorStateException
Исключение монитора в этом коде. Согласно моему пониманию, из-за синхронизированного блока вокруг args
, который является объектом строкового массива, текущий поток должен был получить блокировку и с помощью метода wait, я освобождаю блокировку.IllegalMonitorStateException в коде
Может ли кто-нибудь объяснить мне причину этого исключения?
Ум, здесь нет нитей, кроме основного, если у меня что-то не хватает. Пожалуйста, разместите свою полную стек. – hexafraction
Какая строка выдает исключение? – zch
Вы держите монитор для объекта args, но вызываете 'wait()' для текущего объекта потока. Вам нужно вызвать 'wait()' на объект, на который вы держите монитор. См. этот вопрос: http://stackoverflow.com/questions/3773807/threads-synchronizing-in-java-illegalmonitorstateexception?rq=1 – confusopoly