Всем привет! Первый пункт задачи — Разберись, что делает программа, и тут немного возникли проблемы. Правильно ли я понимаю, что можно в методе run() обойтись без цикла? Кажется, что у нас все равно будет только один виток, и потому можно написать так:
public void run() {
        if (RUNWAY.trySetTakingOffPlane(this)) {    // если взлетная полоса свободна, занимаем ее
            System.out.println(getName() + " взлетает");
            takingOff();// взлетает
            System.out.println(getName() + " уже в небе");
            RUNWAY.setTakingOffPlane(null);
        } else if (!this.equals(RUNWAY.getTakingOffPlane())) {  // если взлетная полоса занята самолетом
            System.out.println(getName() + " ожидает");
            waiting(); // ожидает
        }
    }