java实现火车站有三个窗口卖票,一个一百张票
时间: 2024-03-07 12:20:46 浏览: 83
以下是一个简单的Java实现,使用线程模拟三个窗口同时卖票的情况:
```
public class TrainStation {
private static int totalTickets = 100;
public static void main(String[] args) {
TicketSeller seller1 = new TicketSeller("窗口1");
TicketSeller seller2 = new TicketSeller("窗口2");
TicketSeller seller3 = new TicketSeller("窗口3");
seller1.start();
seller2.start();
seller3.start();
}
static class TicketSeller extends Thread {
private String name;
public TicketSeller(String name) {
this.name = name;
}
@Override
public void run() {
while (totalTickets > 0) {
synchronized (TrainStation.class) {
if (totalTickets > 0) {
System.out.println(name + "卖出了一张票,剩余票数为" + (--totalTickets));
} else {
System.out.println(name + "发现票已经卖完了...");
}
}
// 模拟卖票过程
try {
sleep((int) (Math.random() * 100));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
```
运行结果类似如下:
```
窗口1卖出了一张票,剩余票数为99
窗口2卖出了一张票,剩余票数为98
窗口3卖出了一张票,剩余票数为97
窗口1卖出了一张票,剩余票数为96
窗口3卖出了一张票,剩余票数为95
窗口2卖出了一张票,剩余票数为94
...
```
注意到使用`synchronized`关键字确保了多个线程同时修改`totalTickets`时的线程安全。同时,为了模拟卖票过程,每个线程卖完一张票后随机等待一段时间。
阅读全文