请用java在不使用集合的情况下编写一个程序在不使用数集的情况下模拟多个售票窗口售卖一列火车票的过程。具体的,共有10个售票窗口,每个售票窗口随机休眠一段时间后售出随机数量的车票(1~10张);每张车票有唯一的编号(例如:1~1000号);请使用同步机制确保同一编号的一张票只能被售卖一次;该列车票售卖完毕,程序运行结束。
时间: 2023-06-15 18:06:43 浏览: 111
以下是一个简单的Java程序,使用线程模拟多个售票窗口售卖火车票的过程。要实现同步机制,我们使用synchronized关键字确保同一时间只有一个线程可以访问共享资源(即售票窗口和车票)。
```java
public class TicketSales {
private static int totalTickets = 1000;
private static int soldTickets = 0;
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
new Thread(new TicketSeller(), "Ticket Seller " + (i + 1)).start();
}
}
public static synchronized int sellTicket() {
if (soldTickets < totalTickets) {
soldTickets++;
return soldTickets;
}
return -1;
}
static class TicketSeller implements Runnable {
@Override
public void run() {
while (true) {
try {
// 随机休眠一段时间
Thread.sleep((int) (Math.random() * 1000));
} catch (InterruptedException e) {
e.printStackTrace();
}
// 随机售出 1~10 张车票
int num = (int) (Math.random() * 10) + 1;
for (int i = 0; i < num; i++) {
int ticket = sellTicket();
if (ticket == -1) {
System.out.println(Thread.currentThread().getName() + " has sold all tickets!");
return;
}
System.out.println(Thread.currentThread().getName() + " sold ticket " + ticket);
}
}
}
}
}
```
程序首先创建了10个TicketSeller线程,每个线程随机休眠一段时间后售出随机数量的车票。sellTicket()方法使用synchronized关键字确保同一时间只有一个线程可以访问soldTickets变量并售卖车票。当所有车票都售出后,程序结束。
阅读全文