(1)编程模拟售票系统,模拟多个窗口(至少4个)同时出售100张车票的情况;用实现Runnable接口的方法实现多线程。
时间: 2024-01-13 21:03:12 浏览: 130
好的,我可以为您提供一份Java代码示例:
```java
public class TicketSeller implements Runnable {
private static int tickets = 100; // 总票数
private static int count = 0; // 已售出的票数
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 (tickets > 0) { // 判断是否还有票
try {
Thread.sleep(100); // 模拟售票过程
} catch (InterruptedException e) {
e.printStackTrace();
}
count++; // 已售出的票数加1
tickets--; // 剩余票数减1
System.out.println(name + "售出了第" + count + "张票,剩余" + tickets + "张票。");
} else {
System.out.println("车票已售完。");
break;
}
}
}
}
}
public class Main {
public static void main(String[] args) {
Thread t1 = new Thread(new TicketSeller("售票员1"));
Thread t2 = new Thread(new TicketSeller("售票员2"));
Thread t3 = new Thread(new TicketSeller("售票员3"));
Thread t4 = new Thread(new TicketSeller("售票员4"));
t1.start();
t2.start();
t3.start();
t4.start();
}
}
```
上面的代码中,TicketSeller 类实现了 Runnable 接口,代表售票员。在 run 方法中,使用 synchronized 加锁,确保多个售票员之间卖出的票数不会重复。在 main 方法中,创建四个线程代表四个售票员,然后启动这四个线程即可。
希望这份代码能够帮助到您。
阅读全文