java多线程模拟窗口售票过程

package com.ctgu.testThread;

public class BuyTicketsThread implements Runnable{

private int totalTickets = 20;

public void saleTickets(){
    synchronized (this) {
        if(totalTickets > 0){
            String curName = Thread.currentThread().getName();
            System.out.println(curName + " 卖出第 " + totalTickets + " 张票");
            totalTickets--;
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

public synchronized void saleTickets2(){
    if(totalTickets > 0){
        String curName = Thread.currentThread().getName();
        System.out.println(curName + " 卖出第 " + totalTickets + " 张票");
        totalTickets--;
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

@Override
public void run() {
    while(totalTickets > 0){
        saleTickets();
    }
    
}

public static void main(String[] args) {
    BuyTicketsThread bt = new BuyTicketsThread();
    Thread t1 = new Thread(bt, "窗口1");
    Thread t2 = new Thread(bt, "窗口2");
    Thread t3 = new Thread(bt, "窗口3");
    Thread t4 = new Thread(bt, "窗口4");
    t1.start();
    t2.start();
    t3.start();
    t4.start();
}

}
运行结果:
窗口1 卖出第 20 张票
窗口1 卖出第 19 张票
窗口1 卖出第 18 张票
窗口1 卖出第 17 张票
窗口1 卖出第 16 张票
窗口2 卖出第 15 张票
窗口4 卖出第 14 张票
窗口4 卖出第 13 张票
窗口3 卖出第 12 张票
窗口3 卖出第 11 张票
窗口3 卖出第 10 张票
窗口3 卖出第 9 张票
窗口3 卖出第 8 张票
窗口3 卖出第 7 张票
窗口3 卖出第 6 张票
窗口3 卖出第 5 张票
窗口3 卖出第 4 张票
窗口4 卖出第 3 张票
窗口4 卖出第 2 张票
窗口4 卖出第 1 张票

你可能感兴趣的:(java多线程模拟窗口售票过程)