文化节期间,需要控制入场人数在2000人以内,操场设有三个入口,其中大门可以每2s进入一位同学,另外两个侧门可以每5s进入一位同学,从没有人到操场人数达到上限的过程,请使用Java多线程的知识模拟该过程,并记录该过程的总时间。
时间: 2023-11-25 22:05:46 浏览: 108
好的,这个问题需要用到Java多线程的知识,可以使用线程来模拟三个入口同时运作的情况。以下是程序的实现。
```java
public class EntryControlSimulation {
public static void main(String[] args) {
int maxCapacity = 2000; // 最大容量
int count = 0; // 当前人数
int totalTime = 0; // 总时间
// 创建三个线程,模拟三个入口
Thread door1 = new Thread(new Entrance("大门", 2));
Thread door2 = new Thread(new Entrance("侧门1", 5));
Thread door3 = new Thread(new Entrance("侧门2", 5));
// 启动三个线程
door1.start();
door2.start();
door3.start();
// 循环等待人数达到上限
while (count < maxCapacity) {
try {
Thread.sleep(1000); // 等待1秒钟
} catch (InterruptedException e) {
e.printStackTrace();
}
count = Entrance.getCount();
totalTime++;
}
// 停止三个线程
door1.interrupt();
door2.interrupt();
door3.interrupt();
System.out.println("从没有人到操场人数达到上限的过程总时间为:" + totalTime + "s");
}
}
class Entrance implements Runnable {
private static int count = 0; // 当前人数
private String name; // 入口名称
private int interval; // 进入时间间隔
public Entrance(String name, int interval) {
this.name = name;
this.interval = interval;
}
@Override
public void run() {
while (!Thread.currentThread().isInterrupted()) {
try {
Thread.sleep(interval * 1000); // 等待指定时间
} catch (InterruptedException e) {
Thread.currentThread().interrupt(); // 中断线程
}
count++;
}
}
public static int getCount() {
return count;
}
}
```
该程序创建了三个线程,分别模拟三个入口的运作。每个线程都是一个Runnable对象,其中run()方法模拟了人员进入的过程。当线程启动后,会不断地等待指定时间,然后让当前人数加1。另外,在主线程中,使用一个循环等待人数达到上限,每秒钟记录一次总时间,直到人数达到上限。最后,停止三个线程,并输出总时间。
您可以将该程序保存为EntryControlSimulation.java,并在命令行中运行它,就可以看到输出结果。
阅读全文