Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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(99);
- } 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;
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement