java编程模拟3个人卖票。张三、李四和赵五买电影票,售票元只有3张5元的人民币,电影票5元一张。张三拿一张20元的人民币排在李四的前面买票,李四拿一张10元的人民币排在赵五前面买票,赵五拿一张5元的人民币买票。
时间: 2024-02-26 18:54:57 浏览: 18
好的,以下是模拟3个人卖票的Java程序:
```
class TicketSeller {
private int money; // 售票员手里的钱
private int tickets; // 售票员手里的票数
public TicketSeller(int money, int tickets) {
this.money = money;
this.tickets = tickets;
}
public synchronized boolean sellTicket(String name, int price) {
if (price > money || tickets <= 0) {
return false; // 售票失败
}
System.out.println(name + "买了一张票,花费" + price + "元");
money -= price;
tickets--;
return true; // 售票成功
}
}
class Person implements Runnable {
private String name; // 人名
private int money; // 拿的钱
private int price; // 花费
private TicketSeller seller; // 售票员
public Person(String name, int money, int price, TicketSeller seller) {
this.name = name;
this.money = money;
this.price = price;
this.seller = seller;
}
public void run() {
if (seller.sellTicket(name, price)) {
System.out.println(name + "买票成功");
} else {
System.out.println(name + "买票失败");
}
}
}
public class Test {
public static void main(String[] args) {
TicketSeller seller = new TicketSeller(15, 3);
Person p1 = new Person("张三", 20, 5, seller);
Person p2 = new Person("李四", 10, 5, seller);
Person p3 = new Person("赵五", 5, 5, seller);
Thread t1 = new Thread(p1);
Thread t2 = new Thread(p2);
Thread t3 = new Thread(p3);
t1.start();
t2.start();
t3.start();
}
}
```
运行结果:
```
张三买了一张票,花费5元
张三买票成功
李四买了一张票,花费5元
李四买票成功
赵五买了一张票,花费5元
赵五买票成功
```
在这个程序中,售票员类TicketSeller是线程安全的,因为它对售票和钱数的操作都使用了synchronized关键字进行同步,避免了多个人同时修改数据的问题。三个人类Person是线程类,使用了Runnable接口实现run方法,每个人拿着所需的钱和价格,调用售票员的sellTicket方法进行购票。在main方法中创建三个线程,分别代表三个人,开启线程后,售票员会根据每个人所拿的钱和价格进行售票,售票成功则输出成功信息,失败则输出失败信息。