编程模拟售票系统,模拟多个窗口(至少4个)同时出售100张车票的情况;用实现Runnable接口的方法实现多线程。
时间: 2024-03-06 18:48:41 浏览: 183
好的,这是一个有趣的问题。这里是一个简单的示例代码,用于模拟售票系统并使用实现了Runnable接口的多线程来实现多个售票窗口的并行售票。请注意,这只是一个基本的示例,实际的售票系统可能会更加复杂。
```java
public class Ticket implements Runnable {
private static int ticketCount = 100; // 总票数
private static int soldCount = 0; // 已售出票数
private static Object lock = new Object(); // 同步锁
private String windowName; // 窗口名称
public Ticket(String windowName) {
this.windowName = windowName;
}
@Override
public void run() {
while (true) {
synchronized (lock) { // 进入同步块
if (ticketCount > 0) { // 还有票可售
ticketCount--;
soldCount++;
System.out.println(windowName + "售出了第" + soldCount + "张票,剩余票数:" + ticketCount);
} else { // 没有票可售
break;
}
} // 退出同步块
}
}
public static void main(String[] args) {
Thread t1 = new Thread(new Ticket("窗口1"));
Thread t2 = new Thread(new Ticket("窗口2"));
Thread t3 = new Thread(new Ticket("窗口3"));
Thread t4 = new Thread(new Ticket("窗口4"));
t1.start();
t2.start();
t3.start();
t4.start();
}
}
```
在这个示例中,我们使用了一个静态变量ticketCount来表示总票数,一个静态变量soldCount来表示已售出的票数,一个静态对象lock作为同步锁。每个售票窗口都是一个Ticket对象,通过实现Runnable接口来实现多线程。
在run()方法中,我们使用synchronized关键字来对进入同步块的代码进行同步,以保证多个售票窗口不会同时售出同一张票。如果还有票可售,则从总票数中减去一张,已售出的票数加上一张,并输出售票信息;否则退出循环。
在main()方法中,我们创建了四个线程分别代表四个售票窗口,并启动它们。每个线程都会执行Ticket对象的run()方法,从而实现了多个售票窗口的并行售票。
阅读全文