Guest User

Код

a guest
Feb 4th, 2021
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.32 KB | None | 0 0
  1. public abstract class Plane extends Thread {
  2.     public final String name;
  3.     private final Airport airport;
  4.     private final int delay;
  5.     private final int rndDelay;
  6.  
  7.     Plane(String name, Airport airport, int delay, int rndDelay) {
  8.         this.name = name;
  9.         this.delay = delay;
  10.         this.rndDelay = rndDelay;
  11.         this.airport = airport;
  12.         start();
  13.  
  14.     }
  15.  
  16.     public int getDelay() {
  17.         return delay;
  18.     }
  19.  
  20.     public int getRndDelay() {
  21.         return rndDelay;
  22.     }
  23.  
  24.     public static int rnd(int min, int max) {
  25.         max -=min;
  26.         return (int) (Math.random() * ++ max) + min;
  27.     }
  28.  
  29.     @Override
  30.     public void run() {
  31.         Airport.Band band;
  32.         try {
  33.             System.out.println("Прогрев начался: " + name);
  34.             Thread.sleep(getDelay());
  35.             System.out.println("Прогрев завершился: " + name);
  36.             System.out.println("Резервируем полосу для: " + name);
  37.  
  38.                 do {
  39.                     band = airport.tryLockedBand();
  40.                     Thread.sleep(1000);
  41.  
  42.                 } while (band == null);
  43.  
  44.                 try {
  45.                     System.out.println("Взлетаем: " + name + " c полосы " + band.name);
  46.                     Thread.sleep(getRndDelay());
  47.                     System.out.println("Взлетел: " + name);
  48.                 } finally {
  49.                     airport.unlockedBand(band);
  50.                 }
  51.  
  52.         } catch (InterruptedException exception) {}
  53.         }
  54.     }
  55.  
  56. public class Airport {
  57.     private final ArrayList<Band> bands = new ArrayList<>();
  58.  
  59.     Airport(int bandCount) {
  60.         for (int i = 0; i < bandCount; i++) {
  61.             bands.add(new Band("Полоса " + i));
  62.         }
  63.     }
  64.  
  65.     @Nullable
  66.     public Band tryLockedBand() {
  67.         Band result = null;
  68.         for (Band band : bands) {
  69.             if (band.tryLock()) {
  70.                 result = band;
  71.                 break;
  72.             }
  73.         }
  74.         if (result != null) {
  75.             System.out.println("Полоса " + result.name + " зарезервированна ");
  76.         }
  77.         return result;
  78.     }
  79.  
  80.     public void unlockedBand(@NotNull Band band) {
  81.         band.unlock();
  82.     }
  83.  
  84.     static class Band  {
  85.         public final String name;
  86.         private final Lock lock = new ReentrantLock();
  87.  
  88.         Band(String name) {this.name = name;}
  89.  
  90.         private boolean tryLock() {return lock.tryLock();}
  91.  
  92.         private void unlock() {lock.unlock();}
  93.  
  94.  
  95. public class Main {
  96.  
  97.     public static void main(String[] args) {
  98.         final int min = 1000;
  99.         final int max = 10000;
  100.         final int rnd = Plane.rnd(min,max);
  101.  
  102.         Airport airport = new Airport(1);
  103.  
  104.         ArrayList<Plane> planes = new ArrayList<>();
  105.  
  106.         planes.add(new Passenger("Пассажирский1", airport, 5000, rnd));
  107.         planes.add(new Cargo("Грузовой1", airport, 10000, rnd));
  108.         planes.add(new Passenger("Пассажирский2", airport, 5000, rnd));
  109.  
  110.         planes.forEach(plane -> {
  111.             try {
  112.                plane.join();
  113.             } catch (InterruptedException exception) {}
  114.         });
  115.         System.out.println("Программа завершила свою работу");
  116.     }
  117. }
Advertisement
Add Comment
Please, Sign In to add comment