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