模拟火车站窗口售票。三个窗口同时对外发售100张火车票,卖票过程如附件图一所示,避免出现一票多卖的情况,(即一个窗口售票的过程中,其他窗口无法对余票进行操作)。Java代码实现
时间: 2024-03-13 10:43:47 浏览: 83
下面是一个使用Java多线程模拟火车站售票的例子,实现了三个窗口同时对外发售100张火车票,并且保证了一票只能被一名售票员售出的要求。
```
public class TrainTicket {
public static void main(String[] args) {
TicketSeller seller1 = new TicketSeller();
TicketSeller seller2 = new TicketSeller();
TicketSeller seller3 = new TicketSeller();
seller1.setName("售票员1");
seller2.setName("售票员2");
seller3.setName("售票员3");
seller1.start();
seller2.start();
seller3.start();
}
}
class TicketSeller extends Thread {
private static int count = 100;
private static Object lock = new Object(); // 对象锁,保证同一时间只有一名售票员在售票
@Override
public void run() {
while (true) {
synchronized (lock) { // 进入同步代码块,获取对象锁
if (count > 0) {
try {
Thread.sleep(100); // 模拟售票所需时间
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + "售出第" + count + "张火车票");
count--;
} else {
break; // 票已售完,退出循环
}
}
}
}
}
```
在这个例子中,我们创建了三个TicketSeller对象,每个对象都表示一个售票员窗口。在每个售票员的run方法中,使用synchronized关键字来保证同一时间只有一名售票员在售票。使用静态变量count来表示剩余票数,每售出一张票,count减1。当count小于等于0时,退出循环,表示票已售完。
阅读全文