多线程机场



我是编程新手,需要您的帮助。每N秒需要输出队列中有多少架飞机

算法,我不能翻译代码:

  1. 按平面创建主线程

  2. 飞机内开始热身

  3. 热身结束后,飞机说机场,我已经热身了,我在等待可以起飞的信号。

  4. 机场新增飞机排队

  5. 机场看-有飞机在排队,如果有并且有免费波段,拿走波段并给出起飞命令。

  6. 飞机启动功能起飞。他走了,乐队又回来了。

  7. 机场得到乐队和理解,她是自由的。

我的班级机场和班级乐队:

public class Airport {
private final BlockingQueue<Band> bands;
Airport(int bandCount) {
this.bands = new ArrayBlockingQueue<>(bandCount, true);
for (int i = 0; i < bandCount; i++) {
bands.add(new Band("Band " + i));
}
}
public void registerPlaneForTakeoff(Plane plane) {
}
@NotNull
public Band waitForAvailableBand() throws InterruptedException {
Band result = bands.take();
System.out.println("Band " + result.name + " reserved ");
return result;
}
public void releaseBand(@NotNull Band band) {
bands.add(band);
}
static class Band  {
public final String name;
Band(String name) {this.name = name;}
}
}

类货物
public class Cargo extends Plane {
Cargo(String name, Airport airport, int delay) {
super(name, airport, delay);
}
}

类乘客

public class Passenger extends Plane {
Passenger(String name, Airport airport, int delay) {
super(name, airport, delay);
}
}

类飞机

public abstract class Plane extends Thread {
public final String name;
private final Airport airport;
private final int delay;
Plane(String name, Airport airport, int delay) {
this.name = name;
this.airport = airport;
this.delay = delay;
}
public int getDelay() {
return delay;
}
public static int rnd(int min, int max) {
max -=min;
return (int) (Math.random() * ++ max) + min;
}
public void takeOff() {
}
public void warmUp() {
}
@Override
public void run() {
int time = 1000;
int time2 = 10000;
int timeEver = rnd(time,time2);
Airport.Band band;
try {
System.out.println("Warming up start: " + name);
Thread.sleep(timeEver);
System.out.println("Warming up finish: " + name + " " + timeEver);
System.out.println("Reserve band for: " + name);
band = airport.waitForAvailableBand();
try {
System.out.println("Take off: " + name + " from band " + band.name);
Thread.sleep(getDelay());
System.out.println("Took off: " + name);
} finally {
airport.releaseBand(band);
}
} catch (InterruptedException ignored) {}
}
}

类主要

public class Main {
public static void main(String[] args) {

Airport airport = new Airport(3);
ArrayList<Plane> planes = new ArrayList<>();
planes.add(new Passenger("1", airport, 5000));
planes.add(new Cargo("2", airport, 10000));
planes.add(new Passenger("3", airport, 5000));
planes.add(new Passenger("4", airport, 5000));
planes.add(new Cargo("5", airport, 10000));
planes.forEach(Thread::start);
planes.forEach(plane -> {
try {
plane.join();
} catch (InterruptedException ignored) {}
});
}
}

所以你的问题是如何每隔几秒钟输出队列中的飞机数量?只需运行另一个线程,它除了更新显示之外什么都不做。

new Thread(new Runnable() {
public void run() {
System.out.print("Planes in queue: ");
System.out.println(queue.size());
try (
Thread.sleep(3000);
} catch (Exception e) {
// intentionally blank
}
}
}).start();

最新更新