У меня проблема, с которой я застрял несколько часов, и я действительно не знаю, как ее решить. Это довольно просто - у меня есть потоки, один из них должен ждать сигнала от другого. Так или иначе, даже если я делаю сигнал при условии ... ничего не происходит! Похоже, что нить все еще спит. Это действительно странно, проблема, но это может быть моя вина, что я не понимаю, что-то хорошо ...Java, Lock, Condition - Signal not waking waiting thread
Вот часть моего кода:
@Override
public void bodyProduced() {
lock.lock();
producedBodies++;
if (producedEngines == 0) {
while(producedEngines==0)
{
System.out.println("I am still waiting!");
body.awaitUninterruptibly();
}
System.out.println("I waked up!");
producedBodies--;
producedEngines--;
} else {
engine.signalAll();
}
}
Я уверен, что body.signalAll(); вызывается, когда в этом состоянии присутствуют потоки - я проверил, и отладчик много раз перебирает эту строку. Тем не менее, строка «Я жду» появляется только один раз за трэд, а «я просыпаюсь» никогда ...
Любые идеи, как исправить, или что проверить? Я попробовал почти все ...
Спасибо за ваше время и помощь!
Спасибо за ваш ответ. Я знаю об изменчивой вещи, и я использую ее здесь. Так что это не проблема. Ну, это часть моей учебной задачи, поэтому я вынужден использовать блокировку/состояние здесь. Похоже, проблема в том, что я должен сначала разблокировать, и только после того, как я разблокирую другой поток, будет просыпаться. Довольно странно, потому что я не хочу, чтобы часть после пробуждения была синхронизирована. –