使用多线程技术模拟排队买票: 模拟 2 人排队买票,张某和李某买电影票,售票员只有 2 张 5元的钱,电影票 5 元钱一张。张某用一张 20 元的人民币排在王某的前面买票,李某用一张 10 元的人民币买票。请通过编程模拟排队买票的情形。用java编写
时间: 2024-04-28 15:21:16 浏览: 94
排队买票多线程问题
以下是使用Java多线程模拟排队买票的代码:
```java
public class TicketSeller {
private static int availableMoney = 2 * 5; // 可用的钱
private static int ticketPrice = 5; // 票价
public static void main(String[] args) {
// 创建两个买票线程,分别代表张某和李某
Thread zhangThread = new Thread(new Buyer("张某", 20));
Thread liThread = new Thread(new Buyer("李某", 10));
// 启动两个线程,开始排队买票
zhangThread.start();
liThread.start();
}
// 买票线程
private static class Buyer implements Runnable {
private String name; // 买票人姓名
private int money; // 买票人钱数
public Buyer(String name, int money) {
this.name = name;
this.money = money;
}
@Override
public void run() {
synchronized (TicketSeller.class) { // 同步代码块,保证线程安全
if (availableMoney >= ticketPrice) { // 有票可卖
System.out.println(name + "买到了一张票,找您" + (money - ticketPrice) + "元");
availableMoney -= ticketPrice; // 更新可用钱数
} else { // 没有票可卖
System.out.println("对不起," + name + ",票已经卖完了");
}
}
}
}
}
```
解释一下代码的实现思路:
1. 定义了一个TicketSeller类,里面有一个availableMoney变量表示可用的钱,和一个ticketPrice变量表示票价。
2. 在main方法中创建了两个买票线程,分别代表张某和李某,并启动它们。
3. 在Buyer内部实现了Runnable接口,其中的run方法是买票的具体实现,使用了同步代码块保证线程安全。
4. 在同步代码块中,判断可用钱数是否大于等于票价,如果是就卖票,更新可用钱数;否则说明票已经卖完了。
5. 在main方法中,启动两个线程,开始排队买票。
注意:以上代码只是一个简单的模拟,实际情况可能更加复杂,需要更加详细的实现。
阅读全文