假设有火车票1000张,创建10个线程模拟10个售票点,每个售票点100毫秒售出一张票。请模拟并打印出售票过程。注意使用synchronized确保同一张票只能卖出一次。输出格式如下: 第4售票点卖出第100张票 第2售票点卖出第101张票……
时间: 2024-02-15 22:02:43 浏览: 75
好的,我理解了你的要求。我会用Java语言来写这个程序,下面是代码实现:
```java
public class TicketSelling {
private static int ticketCount = 1000;
private static Object lock = new Object();
public static void main(String[] args) {
for (int i = 1; i <= 10; i++) {
int index = i;
new Thread(() -> {
while (true) {
synchronized (lock) {
if (ticketCount > 0) {
System.out.println("第" + index + "售票点卖出第" + (1000 - ticketCount + 1) + "张票");
ticketCount--;
} else {
break;
}
}
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}
}
}
```
程序中使用了一个静态变量 `ticketCount` 来表示剩余的票数,使用 `synchronized` 关键字来保证同一时间只有一个线程能够操作 `ticketCount` 变量。每个售票点都是一个独立的线程,通过循环来一直卖票,直到所有票都售完为止。每售出一张票,就输出一条信息,格式和要求一致。
注意到每个线程不断地卖票,因此必须加入 `try-catch` 块来处理可能的中断异常。
阅读全文