java实现火车站有三个窗口卖票,一个一百张票
时间: 2024-03-07 09:19:26 浏览: 78
以下是一个简单的java程序,实现了火车站有三个窗口卖票,每个窗口都有一百张票。程序使用了线程同步机制,确保每个窗口卖出的票数不会超过一百张。
```
public class TrainStation {
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();
}
}
class TicketSeller extends Thread {
private static int totalTickets = 100;
private String name;
public TicketSeller(String name) {
this.name = name;
}
public void run() {
while (totalTickets > 0) {
synchronized (TicketSeller.class) {
if (totalTickets > 0) {
System.out.println(name + "卖出了第" + totalTickets + "张票");
totalTickets--;
}
}
try {
Thread.sleep(100); // 模拟卖票的时间
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
```
程序中定义了一个TrainStation类和一个TicketSeller类。TrainStation类是程序的入口,它创建了三个TicketSeller线程,并启动这三个线程。TicketSeller类是卖票员类,它继承自Thread类,每个TicketSeller对象代表一个窗口。
在TicketSeller类中,定义了一个静态变量totalTickets,表示当前剩余的票数。在run()方法中,每个线程不断地循环卖票,直到票卖完为止。为了确保线程安全,卖票的过程被放在了一个synchronized块中,这样就能保证每个窗口卖出的票数不会超过一百张。
程序运行时,会输出类似以下的结果:
```
窗口1卖出了第100张票
窗口2卖出了第99张票
窗口3卖出了第98张票
窗口3卖出了第97张票
...
窗口2卖出了第1张票
窗口3卖出了第0张票
```
阅读全文