假设有火车票1000张,创建10个线程模拟10个售票点,每个售票点100毫秒售出一张票。请模拟并打印出售票过程。注意使用synchronized确保同一张票只能卖出一次。输出格式如下: 第4售票点卖出第100张票 第2售票点卖出第101张票……
时间: 2024-03-25 16:41:44 浏览: 19
基于C++模拟火车票售票系统【100010193】
5星 · 资源好评率100%
好的,以下是Java实验五的代码实现:
```java
public class TrainTicketSale {
private static int totalTicketNum = 1000; // 火车票总数
private static int ticketSoldCount = 0; // 已售出的火车票数
public static void main(String[] args) {
// 创建10个售票点线程
for (int i = 1; i <= 10; i++) {
new Thread(new TicketSeller(i)).start();
}
}
// 售票点线程
static class TicketSeller implements Runnable {
private int sellerId; // 售票点编号
public TicketSeller(int sellerId) {
this.sellerId = sellerId;
}
@Override
public void run() {
while (ticketSoldCount < totalTicketNum) {
synchronized (TrainTicketSale.class) {
// 如果还有票,就售出一张
if (ticketSoldCount < totalTicketNum) {
ticketSoldCount++;
System.out.println("第" + sellerId + "售票点卖出第" + ticketSoldCount + "张票");
}
}
try {
// 模拟售票过程,每售出一张票需要100毫秒
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
```
输出结果如下:
```
第9售票点卖出第1张票
第8售票点卖出第2张票
第5售票点卖出第3张票
第10售票点卖出第4张票
第3售票点卖出第5张票
第4售票点卖出第6张票
第6售票点卖出第7张票
第2售票点卖出第8张票
第1售票点卖出第9张票
第7售票点卖出第10张票
第8售票点卖出第11张票
第9售票点卖出第12张票
第10售票点卖出第13张票
第3售票点卖出第14张票
第5售票点卖出第15张票
第6售票点卖出第16张票
第4售票点卖出第17张票
第7售票点卖出第18张票
第1售票点卖出第19张票
第2售票点卖出第20张票
第8售票点卖出第21张票
第9售票点卖出第22张票
第10售票点卖出第23张票
第3售票点卖出第24张票
第5售票点卖出第25张票
...
```
每个售票点依次售出火车票,售票过程中使用synchronized关键字确保同一张票只能售出一次。
阅读全文