Я уже искал эту ошибку здесь, но я думаю, что мой кусок кода выглядит правильно:
- Я получаю блокировку за пределами попытки..финально
- У меня есть разблокировка в секции 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();
}
}
Есть идеи?