使用java实现网络购票需求说明各方人士共同抢10张票并显示余票限黄牛党只能抢一张票余票为0时结束
以下是一个使用Java实现网络购票的简单示例代码:
import java.util.concurrent.atomic.AtomicInteger;
class Ticket {
private static final int MAX_TICKETS = 10;
private static final AtomicInteger availableTickets = new AtomicInteger(MAX_TICKETS);
public static synchronized int getAvailableTickets() {
return availableTickets.get();
}
public static synchronized boolean bookTicket() {
if (availableTickets.get() <= 0) {
return false;
}
availableTickets.decrementAndGet();
return true;
}
}
class Buyer implements Runnable {
private static final String HUANG_NIU_PARTY = "黄牛党";
private static final AtomicInteger totalBuyers = new AtomicInteger(0);
private final String buyerName;
public Buyer(String buyerName) {
this.buyerName = buyerName;
}
@Override
public void run() {
while (Ticket.getAvailableTickets() > 0) {
if (Ticket.bookTicket()) {
System.out.println(buyerName + "抢到了一张票,剩余票数:" + Ticket.getAvailableTickets());
} else if (buyerName.equals(HUANG_NIU_PARTY)) {
System.out.println(buyerName + "只能抢一张票,已经抢到了,剩余票数:" + Ticket.getAvailableTickets());
break;
} else {
System.out.println("很遗憾," + buyerName + "没有抢到票,剩余票数:" + Ticket.getAvailableTickets());
}
}
totalBuyers.incrementAndGet();
if (totalBuyers.get() == 1) {
System.out.println("抢票结束");
}
}
}
public class OnlineTicketingSystem {
private static final int TOTAL_BUYERS = 10;
public static void main(String[] args) {
for (int i = 1; i <= TOTAL_BUYERS; i++) {
Thread buyerThread = new Thread(new Buyer("买家" + i));
buyerThread.start();
}
}
}
该示例代码中,使用两个类Ticket和Buyer来模拟网络购票系统。
Ticket类中使用AtomicInteger来表示可用票数,并提供了getAvailableTickets()和bookTicket()方法来获取和预订票。
Buyer类实现了Runnable接口,代表购票者。在run()方法中,购票者不断尝试抢票,如果抢到票则打印抢票成功的信息,否则根据是否为黄牛党打印相应的信息。每个购票者抢到票或者无法继续抢票后,都会增加一个计数器totalBuyers的值,当所有购票者都结束后,会打印抢票结束的信息。
在main()方法中,创建了10个购票者的线程,并启动它们。
请注意,该示例代码中使用synchronized关键字来保证购票和获取剩余票数的操作是线程安全的
原文地址: http://www.cveoy.top/t/topic/h7qj 著作权归作者所有。请勿转载和采集!