设计一个java程序,能够让多个用户同时从4个销售点完成100张票的购票操作的多线程
时间: 2023-12-14 08:38:06 浏览: 24
下面是一个简单的Java程序,可以让多个用户同时从4个销售点完成100张票的购票操作的多线程:
```java
public class TicketSales {
public static void main(String[] args) {
final int NUM_USERS = 10;
final int NUM_SALES_POINTS = 4;
final int NUM_TICKETS = 100;
// create an array of sales points
SalesPoint[] salesPoints = new SalesPoint[NUM_SALES_POINTS];
for (int i = 0; i < NUM_SALES_POINTS; i++) {
salesPoints[i] = new SalesPoint(i + 1, NUM_TICKETS / NUM_SALES_POINTS);
}
// create an array of users
User[] users = new User[NUM_USERS];
for (int i = 0; i < NUM_USERS; i++) {
users[i] = new User(i + 1, salesPoints);
users[i].start();
}
}
}
class SalesPoint {
private int id;
private int numTickets;
public SalesPoint(int id, int numTickets) {
this.id = id;
this.numTickets = numTickets;
}
public int getId() {
return id;
}
public synchronized boolean sellTicket() {
if (numTickets > 0) {
numTickets--;
return true;
} else {
return false;
}
}
}
class User extends Thread {
private int id;
private SalesPoint[] salesPoints;
public User(int id, SalesPoint[] salesPoints) {
this.id = id;
this.salesPoints = salesPoints;
}
public void run() {
int numTicketsPurchased = 0;
while (numTicketsPurchased < 10) {
for (int i = 0; i < salesPoints.length; i++) {
if (salesPoints[i].sellTicket()) {
System.out.println("User " + id + " purchased a ticket from Sales Point " + salesPoints[i].getId());
numTicketsPurchased++;
if (numTicketsPurchased == 10) {
break;
}
}
}
}
}
}
```
在这个程序中,有4个销售点和10个用户。每个销售点都有25张票可供销售。每个用户都会尝试从销售点购买票,直到他们买到了10张票为止。每个用户都是一个独立的线程,可以同时运行。每个销售点都是一个Java对象,并使用synchronized关键字来确保多个用户不能同时购买同一张票。