Java网络购票系统实现:多线程抢票,黄牛限制
以下是一个简单的使用Java实现网络购票的示例代码:\n\njava\nimport java.util.concurrent.atomic.AtomicInteger;\n\npublic class TicketSystem {\n private static final int TOTAL_TICKETS = 10;\n private static final int MAX_TICKETS_PER_USER = 1;\n\n private static AtomicInteger remainingTickets = new AtomicInteger(TOTAL_TICKETS);\n\n public static void main(String[] args) {\n for (int i = 1; i <= TOTAL_TICKETS; i++) {\n new Thread(new TicketBuyer("用户" + i)).start();\n }\n }\n\n static class TicketBuyer implements Runnable {\n private String buyerName;\n\n public TicketBuyer(String name) {\n this.buyerName = name;\n }\n\n @Override\n public void run() {\n while (remainingTickets.get() > 0) {\n int ticketsToBuy = MAX_TICKETS_PER_USER;\n if (buyerName.equals("黄牛党")) {\n ticketsToBuy = 1;\n }\n\n if (remainingTickets.get() >= ticketsToBuy) {\n int oldRemaining = remainingTickets.getAndAdd(-ticketsToBuy);\n if (oldRemaining >= ticketsToBuy) {\n System.out.println(buyerName + "购买了" + ticketsToBuy + "张票,剩余票数:" + (oldRemaining - ticketsToBuy));\n }\n }\n }\n }\n }\n}\n\n\n这个示例中,我们使用AtomicInteger来表示剩余票数,并使用getAndAdd()方法来实现原子操作。每个用户通过一个线程来进行购票操作。黄牛党只能购买一张票,其他用户可以一次购买多张票,但是总数不能超过MAX_TICKETS_PER_USER。\n\n运行示例代码后,程序会创建10个线程同时抢购票,直到所有票卖完。每次购买成功后,会显示剩余票数。
原文地址: https://www.cveoy.top/t/topic/pQfT 著作权归作者所有。请勿转载和采集!