在火车站,现在100位乘客在排队进站,第100位乘客按照从1到100的顺序依次编号。有三个进站口,这三个进站口依次编号为a口、b口、c口,每位乘客进站时长为1秒钟。java代码
时间: 2024-02-18 13:05:59 浏览: 66
以下是一个简单的Java代码示例,用于模拟三个进站口的情况:
```
public class TrainStation {
private static final int TOTAL_PASSENGERS = 100;
private static final int TIME_PER_PASSENGER = 1000; //1秒钟
private static final int NUM_OF_PLATFORMS = 3;
public static void main(String[] args) {
//初始化三个进站口
Platform[] platforms = new Platform[NUM_OF_PLATFORMS];
for (int i = 0; i < NUM_OF_PLATFORMS; i++) {
platforms[i] = new Platform("Platform " + (i+1));
}
//创建并启动100个乘客线程
for (int i = 1; i <= TOTAL_PASSENGERS; i++) {
Passenger passenger = new Passenger("Passenger " + i, platforms);
passenger.start();
try {
Thread.sleep(TIME_PER_PASSENGER);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class Platform {
private String name;
private Queue<Passenger> queue;
public Platform(String name) {
this.name = name;
this.queue = new LinkedList<>();
}
public synchronized void addPassenger(Passenger passenger) {
queue.add(passenger);
System.out.println(passenger.getName() + " enters " + name + " queue.");
}
public synchronized void removePassenger() {
Passenger passenger = queue.poll();
System.out.println(passenger.getName() + " boards the train from " + name + ".");
}
}
class Passenger extends Thread {
private String name;
private Platform[] platforms;
public Passenger(String name, Platform[] platforms) {
this.name = name;
this.platforms = platforms;
}
@Override
public void run() {
for (int i = 0; i < platforms.length; i++) {
Platform platform = platforms[i];
synchronized (platform) {
platform.addPassenger(this);
try {
platform.wait(); //等待通知
} catch (InterruptedException e) {
e.printStackTrace();
}
platform.removePassenger();
}
}
}
}
```
在这个例子中,我们创建了一个TrainStation类和两个辅助类Passenger和Platform。TrainStation类初始化了三个进站口,然后创建并启动100个乘客线程。每个乘客线程依次进入三个进站口的队列,等待通知。当乘客进入队列时,它会打印一条消息,表明它已经进入了某个进站口的队列。当乘客被通知可以进站时,它会从队列中移除,然后打印一条消息,表明它已经从某个进站口上车了。
需要注意的是,我们在Platform类中使用了synchronized关键字来确保每个乘客线程在进入队列时是线程安全的。我们还使用了wait()和notify()方法来等待和通知乘客线程。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)