Я уже искал эту ошибку здесь, но я думаю, что мой фрагмент кода выглядит правильно:
- Я получаю блокировку вне попытки.. наконец
- У меня есть разблокировка в разделе finally
- Я только пытался дождаться состояния внутри замка.
- Я даже печатаю, если текущая блокировка удерживается этим потоком и возвращает true.
Это фрагмент кода. Если я попытаюсь запустить код, я получу исключение java.lang.IllegalMonitorStateException: текущий поток не является владельцем. Ошибка в методе cond.wait().
public void takeARest() {
lock.lock();
try {
while (disembark < totalPassengers) {
System.err.printf("Held by %s%n",lock.isHeldByCurrentThread());
cond.wait();
}
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
lock.unlock();
}
}
Любые идеи?