Это парадигма, которая выступает в качестве ожидания при вызове wait() внутри цикла while внутри синхронизированного блока.
Мой вопрос в том, как поток ожидания() возвращает блокировку?
// Thread 1
synchronized (mon) {
while (!condition)
mon.wait();
// Do something
}
//Thread 2
synchronized (mon) {//set condition appropriately
mon.notify();
}
Рассмотрим, что поток 1 запускается первым и начинает ждать условия. Он освобождает блокировку, и поток 2 получает блокировку, устанавливает условие и уведомляет поток 1. Теперь поток 1 получает блокировку, проверяет состояние и начинает выполнение "сделать что-то".
Мой вопрос в том, что когда Thread 1 уведомляется о том, что он запускает выполнение из условия while, строка кода, которая была синхронизирована (mon), никогда не выполняется снова, а затем, как поток 1 получает блокировку? Какова внутренняя динамика, которая возвращает блокировку Thread 1?