Блокировка 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 - это один и тот же объект; благодарю вас:)!

0 ответов

Другие вопросы по тегам