Почему это дает мне исключение IllegalMonitorStateException, когда все, что я делаю, это блокирую, а затем ожидаю условиJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Почему это дает мне исключение IllegalMonitorStateException, когда все, что я делаю, это блокирую, а затем ожидаю услови

Сообщение Anonymous »

Для контекста: это игра в блэкджек, поэтому отсюда следуют дилер, игрок, стоимость руки и другие термины.
obLock — это ReentrantLock, а DealerDone — это условие этой блокировки.< /p>
Раньше я использовал тот же метод, когда у меня была статическая блокировка в классе, которую я использую для блокировки метода/части метода, ожидания сигнала от условия и затем разблокируйте метод после того, как я закончу
Насколько я понимаю, я должен получить исключение IllegalMonitorStateException только в том случае, если у меня нет владения блоком, когда я пытаюсь выполнить условие ожидания. Это имеет смысл, поскольку я блокирую его с обеих сторон, ожидая/сигнализируя, но я делал это раньше и так меня учили.
Вот мой код для ожидания условия

Код: Выделить всё

obLock.lock();
try {
dealerDone.await();
}
catch (InterruptedException ignored) {}
finally {
obLock.unlock();
}
А вот мой код для сигнализации состояния

Код: Выделить всё

obLock.lock();
try {
while (dealerHand < dealer.getBreakpoint()) {
drawCard(dealer);
dealerHand = dealer.getHandValue();
}
dealerDone.signalAll();
} finally {
obLock.unlock();
}
Объявление моей блокировки/условия

Код: Выделить всё

private static Lock obLock = new ReentrantLock();
private static Condition dealerDone = obLock.newCondition();
Я пробовал превратить его в синхронизированный блок (хотя нас о них не учили в классе, поэтому я с ними не очень знаком), но у меня возникла та же проблема .
Я пробовал сделать 2 разных замка, чтобы они не закрывались одновременно, но я думаю, что это больше связано с взаимодействием игроков друг с другом, чем с дилером. взаимодействие с игроками.

Подробнее здесь: https://stackoverflow.com/questions/781 ... ng-is-lock
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»