按以下要求编写java多线程程序: (1)有一辆公交车,乘客座位数为30座,假设前后两个车门都能上车,每次从某一个门上车1个人。 (2)在主类ThreadTest.java中创建2个线程并取名“前门”、“后门”,分别模拟在前/后门上车,假设每隔100~200毫秒内的随机时间上车。 (3)如果坐满则不能再上车。请模拟上车过程并且打印出是从哪个车门上车以及剩下的座位数
时间: 2024-03-10 13:48:29 浏览: 91
在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口(csdn)————程.pdf
下面是符合要求的Java多线程程序:
```java
public class ThreadTest public static void main(String[] args) {
// 创建公交车对象,座位数为30
Bus bus = new Bus(30);
// 创建前门线程和后门线程
Thread frontDoor = new Thread(new PassengerThread("前门", bus));
Thread backDoor = new Thread(new PassengerThread("后门", bus));
// 启动线程
frontDoor.start();
backDoor.start();
}
}
// 公交车类
class Bus {
private int seats; // 剩余座位数
public Bus(int seats) {
this.seats = seats;
}
// 加锁,防止多个线程同时修改座位数
public synchronized void getOn(String door) {
if (seats > 0) {
seats--;
System.out.println(door + " 上车,剩余座位数:" + seats);
} else {
System.out.println("车已经满员," + door + " 上不了车");
}
}
}
// 乘客线程类
class PassengerThread implements Runnable {
private String door; // 车门名称
private Bus bus; // 公交车对象
public PassengerThread(String door, Bus bus) {
this.door = door;
this.bus = bus;
}
@Override
public void run() {
while (true) {
try {
// 随机100~200毫秒内的时间上车
Thread.sleep((int) (Math.random() * 100 + 100));
} catch (InterruptedException e) {
e.printStackTrace();
}
// 通过车门上车
bus.getOn(door);
}
}
}
```
程序中,公交车类中的 `getOn()` 方法是一个同步方法,使用synchronized关键字加锁,确保同一时刻只有一个线程可以修改座位数。乘客线程类中的 `run()` 方法是一个死循环,每次随机100~200毫秒后通过车门上车,调用公交车对象的 `getOn()` 方法。程序中创建了两个线程分别模拟前门和后门的上车过程。
阅读全文