用java帮我解决这个问题,模拟多人售票系统,火车票共100张,通过创建4个线程,模拟4个售票系统,进行售票操作。
时间: 2024-03-01 07:54:11 浏览: 20
好的,以下是Java代码实现:
```java
public class TicketSystem {
public static void main(String[] args) {
// 创建一个火车票对象
TrainTicket ticket = new TrainTicket(100);
// 创建 4 个线程,模拟 4 个售票系统
Thread t1 = new Thread(new TicketSeller(ticket));
Thread t2 = new Thread(new TicketSeller(ticket));
Thread t3 = new Thread(new TicketSeller(ticket));
Thread t4 = new Thread(new TicketSeller(ticket));
// 启动线程
t1.start();
t2.start();
t3.start();
t4.start();
}
}
// TrainTicket 类,表示火车票
class TrainTicket {
private int ticketCount; // 火车票数量
public TrainTicket(int ticketCount) {
this.ticketCount = ticketCount;
}
// 获取火车票数量
public int getTicketCount() {
return ticketCount;
}
// 售出一张火车票
public synchronized void sellTicket() {
if (ticketCount > 0) {
ticketCount--;
System.out.println(Thread.currentThread().getName() + " 售出了一张火车票,剩余:" + ticketCount);
} else {
System.out.println(Thread.currentThread().getName() + " 火车票已售罄!");
}
}
}
// TicketSeller 类,表示售票员
class TicketSeller implements Runnable {
private TrainTicket ticket;
public TicketSeller(TrainTicket ticket) {
this.ticket = ticket;
}
@Override
public void run() {
while (ticket.getTicketCount() > 0) {
ticket.sellTicket();
try {
Thread.sleep(100); // 暂停 0.1s
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
```
在 TicketSystem 类中,创建了一个火车票对象,然后创建了 4 个线程,分别模拟 4 个售票系统。在 TrainTicket 类中,使用 synchronized 关键字对售票方法进行同步,以确保多个线程同时访问时,不会出现并发问题。在 TicketSeller 类中,实现了售票员的售票操作。在 main 方法中,启动 4 个线程,执行过程中,可以看到 4 个售票系统交替地对火车票进行售卖,直到售罄。