使用Java多线程编程知识实现一个火车售票系统(三个窗口轮流售票) 分别创建三个类(Ticket,SaleWindows,TicketDemo)注:Ticket类用于统计票务信息,统计售了多少张票 SaleWindows类继承了Thread线程类用于模拟售票窗口 TiacketDemo类
时间: 2023-03-24 11:01:06 浏览: 111
下面是一个基于Java多线程知识实现的火车售票系统,包括三个类:Ticket、SaleWindows和TicketDemo。
Ticket类用于统计售票信息,记录剩余票数、票价等信息。
```
public class Ticket {
private int remain;
private int price;
public Ticket(int remain, int price) {
this.remain = remain;
this.price = price;
}
public synchronized int getRemain() {
return remain;
}
public synchronized int getPrice() {
return price;
}
public synchronized void sell() {
remain--;
}
}
```
SaleWindows类继承自Thread类,用于模拟售票窗口。它有一个Ticket对象引用,每个窗口独立出售火车票。
```
public class SaleWindows extends Thread {
private Ticket ticket;
public SaleWindows(Ticket ticket) {
this.ticket = ticket;
}
public void run() {
while (true) {
synchronized (ticket) {
if (ticket.getRemain() > 0) {
ticket.sell();
System.out.println(Thread.currentThread().getName() + " sell ticket, remain " + ticket.getRemain() + " tickets");
} else {
System.out.println(Thread.currentThread().getName() + " no more ticket");
break;
}
}
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
```
TicketDemo类用于创建多个窗口模拟售票过程,并记录售票情况。
```
public class TicketDemo {
public static void main(String[] args) {
Ticket ticket = new Ticket(50, 10);
int windowNum = 3;
SaleWindows[] windows = new SaleWindows[windowNum];
for (int i = 0; i < windowNum; i++) {
windows[i] = new SaleWindows(ticket);
windows[i].setName("Window-" + (i + 1));
windows[i].start();
}
}
}
```
上述代码实现了一个简单的火车售票系统,Ticket类用于记录售票信息,SaleWindows类模拟售票过程,TicketDemo类用于创建多个窗口并模拟售票过程。其中,使用synchronized关键字来确保售票操作的原子性,避免多个售票窗口同时卖出同一张票的情况。
阅读全文