Блокировка Java / Условная переменная - signal() не пробуждает поток
Поэтому застрял здесь, пытался искать ответы, не мог найти ни одного. Просто я продолжаю пытаться заставить Поезд сигнализировать Пассажиру, что он находится на станции. Сигнал постоянно зацикливается, но пассажир просто не просыпается.
Я распечатал хеш-код до сигнала / ожидания, и они одинаковы, поэтому условия, которые они используют, должны быть одинаковыми.
Требуются блокировки / условия, поэтому я не могу использовать другие методы синхронизации...
Поезд:
currStation.getLock().lock();
try{
System.out.println(currStation.getTrainCond().hashCode());
while(seats > 0 && currStation.getWaitingPassengers() > 0){
currStation.getTrainCond().signal();
//thread doesn't end.
try {
thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
try {
thread.sleep(1000);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
}
finally{
currStation.getLock().unlock();
}
Пассажир:
station.getLock().lock();
try {
System.out.println(station.getTrainCond().hashCode());
station.getTrainCond().await();
while(!station.getSeat(this)){
//keep running
try {
thread.sleep(10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
};
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}finally{
station.getLock().unlock();
}
}
station & currStation - это один и тот же объект; благодарю вас:)!