package com.javarush.test.level16.lesson07.task05;
/* Аэропорт
1. Разберись, что делает программа.
2. Исправь метод takingOff(взлет) - сейчас он работает оооочень долго. Взлет должен занимать 100 миллисекунд.
3. Реализуй метод waiting по аналогии с методом takingOff. Время ожидания не должно превышать время взлета.
*/
public class Solution {
public static volatile Runway RUNWAY = new Runway(); //1 взлетная полоса
public static void main(String[] args) throws InterruptedException {
Plane plane1 = new Plane("Самолет #1");
Plane plane2 = new Plane("Самолет #2");
Plane plane3 = new Plane("Самолет #3");
}
public static class Plane extends Thread {
public Plane(String name) {
super(name);
start();
}
public void run() {
boolean isAlreadyTakenOff = false;
while (!isAlreadyTakenOff) {
if (RUNWAY.getTakingOffPlane() == null) { //если взлетная полоса свободна
RUNWAY.setTakingOffPlane(this);
System.out.println(getName() + " взлетает");
takingOff();//взлетает
System.out.println(getName() + " уже в небе");
isAlreadyTakenOff = true;
RUNWAY.setTakingOffPlane(null);
} else if (!this.equals(RUNWAY.getTakingOffPlane())) { //если взлетная полоса занята самолетом
System.out.println(getName() + " ожидает");
waiting(); //ожидает
}
}
}
}
private static void waiting() {
//add your code here - добавь код тут
try {
Thread.sleep(100);
} catch (InterruptedException e) {
}
}
private static void takingOff() {
//fix this method - исправь этот метод
try {
Thread.sleep(100);
} catch (InterruptedException e) {
}
}
public static class Runway { //взлетная полоса
private Thread t;
public Thread getTakingOffPlane() {
return t;
}
public void setTakingOffPlane(Thread t) {
synchronized (this) {
this.t = t;
}
}
}
}
Leave A Comment