Java 多线程售票系统:使用 Lock 锁实现三个窗口同时卖票
使用Java的Lock锁和Thread类来实现三个窗口同时卖500张票的功能。\n\njava\nimport java.util.concurrent.locks.Lock;\nimport java.util.concurrent.locks.ReentrantLock;\n\npublic class TicketSale extends Thread {\n private static int tickets = 500; // 初始票数\n private static Lock lock = new ReentrantLock(); // 创建锁对象\n\n public TicketSale(String name) {\n super(name);\n }\n\n @Override\n public void run() {\n while (tickets > 0) {\n try {\n lock.lock(); // 获取锁\n if (tickets > 0) {\n System.out.println(Thread.currentThread().getName() + "卖出第" + tickets + "张票");\n tickets--;\n }\n } finally {\n lock.unlock(); // 释放锁\n }\n }\n }\n\n public static void main(String[] args) {\n Thread t1 = new TicketSale("窗口1");\n Thread t2 = new TicketSale("窗口2");\n Thread t3 = new TicketSale("窗口3");\n\n t1.start();\n t2.start();\n t3.start();\n }\n}\n\n\n在上面的代码中,我们创建了一个名为TicketSale的类,继承自Thread类。在run方法中,使用lock.lock()来获取锁,然后判断票数是否大于0,如果大于0,则卖出一张票并将票数减1。最后使用lock.unlock()释放锁。\n\n在main方法中,创建了三个窗口线程对象t1、t2、t3,并分别启动这三个线程。每个线程在运行时会执行run方法,通过锁的机制来保证同时只有一个线程卖票,并且保证了线程安全。\n\n这样,三个窗口就可以同时卖出500张票了。
原文地址: https://www.cveoy.top/t/topic/pZka 著作权归作者所有。请勿转载和采集!