按以下要求编写java多线程程序: (1)有一辆公交车,乘客座位数为30座,假设前后两个车门都能上车,每次从某一个门上车1个人。 (2)在主类ThreadTest.java中创建2个线程并取名“前门”、“后门”,分别模拟在前/后门上车,假设每隔100~200毫秒内的随机时间上车。 (3)如果坐满则不能再上车且关闭程序。请模拟上车过程并且打印出是从哪个车门上车以及剩下的座位数。
时间: 2024-03-22 21:42:55 浏览: 57
以下是Java多线程程序的代码实现:
```java
public class Bus {
private int seats = 30;
private boolean isFull = false;
public synchronized void getOn(String door) {
if (!isFull) {
seats--;
System.out.println(Thread.currentThread().getName() + "上了公交车,从" + door + "门上车,还剩" + seats + "个座位");
if (seats == 0) {
isFull = true;
System.out.println("公交车已满,不能再上车了!");
}
}
}
}
public class Passenger extends Thread {
private Bus bus;
private String door;
public Passenger(Bus bus, String door, String name) {
super(name);
this.bus = bus;
this.door = door;
}
public void run() {
while (!bus.isFull) {
bus.getOn(door);
try {
Thread.sleep((int) (Math.random() * 100 + 100));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public class ThreadTest {
public static void main(String[] args) {
Bus bus = new Bus();
Passenger frontDoor = new Passenger(bus, "前", "前门");
Passenger backDoor = new Passenger(bus, "后", "后门");
frontDoor.start();
backDoor.start();
}
}
```
在这个程序中,我们创建了一个 `Bus` 类来表示公交车,其中包含了座位数和一个布尔值 `isFull`,表示公交车是否已经满了。`getOn()` 方法是一个同步方法,用来模拟乘客上车的过程。如果公交车还没满,乘客就可以上车并且座位数减一,同时打印出是从哪个车门上车以及剩余座位数。如果公交车已经满了,就会打印出相应的信息,表示不能再上车了。
然后我们创建了一个 `Passenger` 类来表示乘客,其中包含了一个 `Bus` 对象和一个表示车门的字符串 `door`。在 `run()` 方法中,我们使用一个循环来模拟乘客上车的过程,直到公交车已满为止。在循环里面,我们调用 `getOn()` 方法来模拟上车的过程,然后使用 `Thread.sleep()` 方法来让线程休眠一段时间,模拟乘客上车的时间间隔。
最后,在 `main()` 方法中,我们创建了一个 `Bus` 对象和两个 `Passenger` 对象,分别代表从前门和后门上车的乘客。然后调用 `start()` 方法启动这两个线程。当公交车已经满了之后,这两个线程就会停止运行。
阅读全文