Условные переменные и блокировки - PullRequest
0 голосов
/ 06 сентября 2018

Конкретно думая о Java, скажем, у меня есть объект блокировки

Lock lock = new ReentrantLock();
Condition cond = aLock.newCondition();

public void a(){
  lock.lock();
  while(available == false){
    //available is some boolean from somewhere
    cond.await();
  } 
  cond.signal();
  lock.unlock();
}

Я не понимаю, как это работает. Если я звоню cond.await(), находясь внутри void a(), то также звоню cond.signal() внутри того же void a(), как я получу уведомление в void a()? Я хочу сказать, что если signal после цикла, как я когда-либо прерву его? Это похоже на бесконечную ситуацию.

Я скопировал этот код откуда-то, поэтому я и спрашиваю. Спасибо

...