多线程售票问题

2021-07-25  本文已影响0人  让你变好的过程从来都不会很舒服

模拟三个售票窗口售票100,分别使用继承Thread和实现Runnable接口的方式,并分析问题所在

public class SellTicket {

    public static void main(String[] args) {

        SellTicket01 sellTicket01 = new SellTicket01();
        SellTicket01 sellTicket02 = new SellTicket01();
        SellTicket01 sellTicket03 = new SellTicket01();
        // 会出现票数超卖的现象
        sellTicket01.start();
        sellTicket02.start();
        sellTicket03.start();
    }
}


class SellTicket01 extends Thread{

    private static int ticketNum = 100; // 让多个线程共享

    @Override
    public void run() {

        while (true) {
            if(ticketNum <= 0){
                System.out.println("售票结束。。。");
                break;
            }
            try {
                Thread.sleep(5);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("线程"+Thread.currentThread().getName()+"售出一张票,还剩余票数:"+(ticketNum--));
        }
    }
}
上一篇 下一篇

猜你喜欢

热点阅读