使用Java语言完成:火车站有多个售票窗口,这些售票窗口一块卖100张票,即100张票被多个窗口共享。使用线程技术模拟窗口售票,线程任务用输出语句模拟卖出的钱。
时间: 2024-02-13 19:06:25 浏览: 59
好的,以下是Java语言的代码实现:
```java
public class TicketSale implements Runnable {
private static int tickets = 100; // 总票数
private static int money = 0; // 总售出金额
private static Object lock = new Object(); // 锁对象,确保线程安全
private int window; // 窗口编号
public TicketSale(int window) {
this.window = window;
}
@Override
public void run() {
while (true) {
synchronized (lock) {
if (tickets > 0) { // 还有票
tickets--; // 售出一张票
money += 10; // 售出金额加10元
System.out.println("窗口" + window + "售出了一张票,总售出金额为" + money + "元");
} else {
break; // 票已售完,退出循环
}
}
}
}
public static void main(String[] args) {
// 创建10个窗口
for (int i = 1; i <= 10; i++) {
new Thread(new TicketSale(i)).start();
}
}
}
```
代码解释:
1. 在类中定义了静态变量 `tickets` 表示总票数,`money` 表示总售出金额,以及一个 `lock` 对象用于确保线程安全。
2. 在 `run()` 方法中,使用 `synchronized` 关键字锁住 `lock` 对象,确保同一时间只有一个线程能够进入临界区。
3. 在临界区中,先判断是否还有票,若有则售出一张票,售出金额加10元,并输出售票信息。
4. 若票已售完,则退出循环。
5. 在 `main()` 方法中,创建10个窗口,每个窗口作为一个线程启动,模拟售票过程。
注意:这里的售票金额为10元,与题目中的100元不同,是为了方便测试。如果需要改成100元,只需将 `money += 10` 改为 `money += 100` 即可。
阅读全文