Если у меня есть код:
ReentrantLock lock = new ReentrantLock();
Condition waiting = lock.newCondition();
Тема 1:
value = default;
lock.lock();
try {
waiting.await(new Long(timeout).longValue(), TimeUnit.SECONDS);
} catch (InterruptedException e) {
} finally {
lock.unlock();
}
Тема 2:
lock.lock();
//set value
waiting.signalAll();
lock.unlock();
Правильно ли я в том, что монитор при блокировке освобождается при вызове await, позволяя запускать управляемый событиями поток 2 при необходимости? Если поток 2 запустится, когда поток 1 сможет возобновить работу после signalAll () или lock.unlock ()? Если поток 2 сигнализирует о пробуждении, но все еще имеет блокировку, как это работает ??