Я читал о reentrantlock
в java и о том, как мы можем узнать условие блокировки, используя метод newCondition()
в интерфейсе Condition
, но затем я увидел в документация интерфейса Условие, которое пользователь должен предоставить для его использования.
Рекомендации по реализации:
Предполагается, что текущий поток удерживает блокировку, связанную с этим условием, при вызове этого метода. Реализация должна определить, так ли это, а если нет, то как реагировать.
это, как говорится, с тех пор, как пару дней я работал над проблемой обедающего философа, и мне пришлось использовать signalAll() и await() без какой-либо самостоятельной реализации!.
например, я использовал эту строку:
((Philosopher) right).getNeighborCondition().await();
где Объект right
объявлен следующим образом:
Iphilosopher right= new Philosopher();
Iphilosopher
— это интерфейс, а Philosopher
— это класс, который его реализует и расширяет Thread
.
при нажатии Ctrl + left mouse click
на метод await()
мне предоставляется метод интерфейса void, который выдает InterruptedException
.
так какая реализация используется при вызове await()
или signalAll()
?!
newCondition()
Возвращает новый экземпляр Condition, привязанный к этому экземпляру Lock. мой вопрос в том, где найти реализацию методаawait()
, а не то, что является возвращаемым значением методаnewCondition()
в классеlock
! - person StudentAccount4   schedule 06.04.2020