【Java篇】Java多线程完成火车票售卖案例
Java多线程完成火车票售卖案例
前言:我们在学习Java多线程时,可能最典型的一个案例就是火车票售卖,那么如何在不重复售票的情况下卖出全部火车票,我们通过Java多线程来完成,并根据 synchronized 同步锁关键字来限制同时卖出一张票的情况
问题:火车票问题:10个售票窗口,卖出150张票,不能卖出相同的票
一、代码实现
/** * 火车票问题:10个售票窗口,卖出150张票,不能卖出相同的票 * */ public class ThreadTest implements Runnable { // 车票 private static int ticket = 1; /** * 加锁对象 */ Object lock = new Object(); /** * 重写 Runnable 的 run 方法,调用卖票的操作方法 * */ @Override public void run() { // 限制150张票 while (ticket <= 150) { shopping(); try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } } /** * 卖票的操作方法 * */ private void shopping() { // 根据lock对象加同步锁(内部会去判断是否有锁) synchronized (lock) { if (ticket <= 150) { System.out.println(Thread.currentThread().getName() + "卖出第" + ticket + "张票!"); // 票号增加 ticket++; } else { // 大于150说明票已经卖完了 System.out.println("没票了!"); return; } } } } // 内部类调用 class runThread { // 执行线程 public static void main(String[] args) { ThreadTest threadTest = new ThreadTest(); for (int i = 1; i <= 10; i++) { new Thread(threadTest, "售票窗口" + i).start(); } } }
二、控制台输出结果
- 交替卖出,不会出现一个窗口累死的情况😄
代码中注释还是比较详细的,如果没讲清楚的话请在下方留言!
总结
上一篇:
通过多线程提高代码的执行效率例子