java编写程序实现多线程售卖火车票,要求如下: (1)假设售票厅有四个窗口可发售某日某次列车的100张车票。 (2)出售的火车票不能出现重复的票号、大于100的票、小于0的票。 (3)在控制台中打印每个窗口对应售出的票
时间: 2023-11-27 13:51:32 浏览: 124
Java多线程之火车售票系统
以下是一个基本的Java多线程售票程序的实现:
```java
public class TicketSeller implements Runnable {
private static int totalTickets = 100;
private static Object lock = new Object();
private String windowName;
public TicketSeller(String windowName) {
this.windowName = windowName;
}
@Override
public void run() {
while (true) {
synchronized (lock) {
if (totalTickets > 0) {
int ticketNumber = totalTickets--;
if (ticketNumber <= 100 && ticketNumber > 0) {
System.out.println(windowName + " 售出了一张票,票号为:" + ticketNumber);
}
} else {
break;
}
}
}
}
public static void main(String[] args) {
Thread seller1 = new Thread(new TicketSeller("窗口1"));
Thread seller2 = new Thread(new TicketSeller("窗口2"));
Thread seller3 = new Thread(new TicketSeller("窗口3"));
Thread seller4 = new Thread(new TicketSeller("窗口4"));
seller1.start();
seller2.start();
seller3.start();
seller4.start();
}
}
```
这个程序中,我们使用了一个静态的 `totalTickets` 变量来记录剩余车票数量,并且使用一个静态的 `lock` 对象来保证多个线程对 `totalTickets` 的访问互斥。每个售票员线程在循环中不断尝试售票,直到所有车票卖完为止。当卖出一张有效的车票时,线程会打印出售票窗口的名称和售出的票号。注意,我们在判断 `ticketNumber` 是否有效时,使用了较为简单的判断条件。如果需要更加严格的判断条件,可以在程序中进行适当的修改。
阅读全文