Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public abstract class Plane extends Thread {
- public final String name;
- private final Airport airport;
- private final int delay;
- private final int rndDelay;
- Plane(String name, Airport airport, int delay, int rndDelay) {
- this.name = name;
- this.delay = delay;
- this.rndDelay = rndDelay;
- this.airport = airport;
- start();
- }
- public int getDelay() {
- return delay;
- }
- public int getRndDelay() {
- return rndDelay;
- }
- public static int rnd(int min, int max) {
- max -=min;
- return (int) (Math.random() * ++ max) + min;
- }
- @Override
- public void run() {
- Airport.Band band;
- try {
- System.out.println("Прогрев начался: " + name);
- Thread.sleep(getDelay());
- System.out.println("Прогрев завершился: " + name);
- System.out.println("Резервируем полосу для: " + name);
- do {
- band = airport.tryLockedBand();
- Thread.sleep(1000);
- } while (band == null);
- try {
- System.out.println("Взлетаем: " + name + " c полосы " + band.name);
- Thread.sleep(getRndDelay());
- System.out.println("Взлетел: " + name);
- } finally {
- airport.unlockedBand(band);
- }
- } catch (InterruptedException exception) {}
- }
- }
- public class Airport {
- private final ArrayList<Band> bands = new ArrayList<>();
- Airport(int bandCount) {
- for (int i = 0; i < bandCount; i++) {
- bands.add(new Band("Полоса " + i));
- }
- }
- @Nullable
- public Band tryLockedBand() {
- Band result = null;
- for (Band band : bands) {
- if (band.tryLock()) {
- result = band;
- break;
- }
- }
- if (result != null) {
- System.out.println("Полоса " + result.name + " зарезервированна ");
- }
- return result;
- }
- public void unlockedBand(@NotNull Band band) {
- band.unlock();
- }
- static class Band {
- public final String name;
- private final Lock lock = new ReentrantLock();
- Band(String name) {this.name = name;}
- private boolean tryLock() {return lock.tryLock();}
- private void unlock() {lock.unlock();}
- public class Main {
- public static void main(String[] args) {
- final int min = 1000;
- final int max = 10000;
- final int rnd = Plane.rnd(min,max);
- Airport airport = new Airport(1);
- ArrayList<Plane> planes = new ArrayList<>();
- planes.add(new Passenger("Пассажирский1", airport, 5000, rnd));
- planes.add(new Cargo("Грузовой1", airport, 10000, rnd));
- planes.add(new Passenger("Пассажирский2", airport, 5000, rnd));
- planes.forEach(plane -> {
- try {
- plane.join();
- } catch (InterruptedException exception) {}
- });
- System.out.println("Программа завершила свою работу");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment