以下是一个使用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();
        }
    }
}

该示例代码中,使用两个类TicketBuyer来模拟网络购票系统。

Ticket类中使用AtomicInteger来表示可用票数,并提供了getAvailableTickets()bookTicket()方法来获取和预订票。

Buyer类实现了Runnable接口,代表购票者。在run()方法中,购票者不断尝试抢票,如果抢到票则打印抢票成功的信息,否则根据是否为黄牛党打印相应的信息。每个购票者抢到票或者无法继续抢票后,都会增加一个计数器totalBuyers的值,当所有购票者都结束后,会打印抢票结束的信息。

main()方法中,创建了10个购票者的线程,并启动它们。

请注意,该示例代码中使用synchronized关键字来保证购票和获取剩余票数的操作是线程安全的

使用java实现网络购票需求说明各方人士共同抢10张票并显示余票限黄牛党只能抢一张票余票为0时结束

原文地址: http://www.cveoy.top/t/topic/h7qj 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录