wait() и notify() в java

Такое дело. Есть список с пассажирами, которые ждут, пока каждого разбудит поток. Но когда он ходит по ним в итерации, просыпается только один. Почему?

На картинке ниже в логах видно, что пассажиры с айди 19 и 12 выходят на одном этаже - но сообщает об этом только один пассажир

введите сюда описание изображения

Как это выглядит в коде:

//смотрим, какие пассажиры доехали
            passengerArrived = passengers.stream()
                    .filter(p -> p.getDestination() == currentFloor)
                    .collect(Collectors.toList());
//удаляем тех пассажиров, которых мы доставили
            passengers.removeAll(passengerArrived);
//"будим" пассажиров, чтобы те вышли
            for (Passenger pass : passengerArrived) {
                synchronized (pass) {
                    pass.notify();
                }
            }
//------------------------
class Passenger {
///some code
@SneakyThrows
    @Override
    public void run() {

        synchronized (this) {
            log.info("Passenger {} waiting an elevator...", id);
            wait();
            log.info("Passenger {} entered elevator!", id);
            wait();
            log.info("Passenger {} arrived his floor - {}! Good!", id, destination);
        }

    }
}

Ответы (0 шт):