用java语言实现 有三个火车票代售点,一共的票数有200张,编写程序实现三个售票同时买票的功能
时间: 2024-02-09 07:08:48 浏览: 102
以下是用Java语言实现的例子:
```java
public class TicketSeller implements Runnable {
private static int totalTickets = 200; // 总票数
private static Object lock = new Object(); // 锁
private String name; // 售票点名称
public TicketSeller(String name) {
this.name = name;
}
@Override
public void run() {
while (true) {
synchronized (lock) {
if (totalTickets > 0) { // 还有票
totalTickets--;
System.out.println(name + "卖出了1张票,还剩" + totalTickets + "张票");
} else { // 没有票了
System.out.println(name + "没有票了");
break;
}
}
}
}
public static void main(String[] args) {
TicketSeller seller1 = new TicketSeller("售票点1");
TicketSeller seller2 = new TicketSeller("售票点2");
TicketSeller seller3 = new TicketSeller("售票点3");
new Thread(seller1).start();
new Thread(seller2).start();
new Thread(seller3).start();
}
}
```
上述代码中,我们定义了一个 `TicketSeller` 类,实现了 `Runnable` 接口,重写了 `run` 方法。在 `run` 方法中,我们使用 `synchronized` 关键字对共享变量 `totalTickets` 进行加锁,保证了线程安全。每个线程都会不断地尝试卖票,如果还有票,则将总票数减1,并输出卖票信息,否则退出循环。
在 `main` 方法中,我们创建了三个 `TicketSeller` 对象,分别代表三个售票点,然后将它们作为参数创建了三个线程并启动。由于线程是并发执行的,所以三个售票点可以同时买票。当总票数卖完了之后,所有线程都会退出循环。
阅读全文