有一辆班车除司机外只能承载80个人,假设前中后三个车门都能上车,如果坐满则不能再上车。请用线程模拟上车过程并且在控制台打印出是从哪个车门上车以及剩下的座位数。(可以使用synchronized或者lock锁实现) 比如:(前门上车---还剩N个座...) 说明: 1每个线程代表一个门来售票
时间: 2024-02-05 15:13:12 浏览: 26
下面是使用synchronized实现的代码:
```java
public class Bus {
private int remainSeats = 80;
public synchronized void sellTicket(String doorName, int ticketNum) {
if (remainSeats >= ticketNum) {
remainSeats -= ticketNum;
System.out.println(doorName + "门上车---还剩" + remainSeats + "个座...");
} else {
System.out.println(doorName + "门上车失败,座位不足");
}
}
}
public class Passenger extends Thread {
private String doorName;
private int ticketNum;
private Bus bus;
public Passenger(String doorName, int ticketNum, Bus bus) {
this.doorName = doorName;
this.ticketNum = ticketNum;
this.bus = bus;
}
@Override
public void run() {
bus.sellTicket(doorName, ticketNum);
}
}
public class Main {
public static void main(String[] args) {
Bus bus = new Bus();
Passenger p1 = new Passenger("前", 30, bus);
Passenger p2 = new Passenger("中", 40, bus);
Passenger p3 = new Passenger("后", 20, bus);
p1.start();
p2.start();
p3.start();
}
}
```
运行结果:
```
前门上车---还剩50个座...
中门上车---还剩10个座...
后门上车失败,座位不足
```
说明:三个乘客线程分别代表前中后三个门售票,通过调用Bus类的sellTicket方法来卖票。由于sellTicket方法加了synchronized锁,所以同一时刻只有一个线程能够进入该方法,保证了数据的正确性和线程安全性。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.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)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)