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(); }

【java多线程模拟窗口售票过程】}
运行结果:
窗口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 张票

    推荐阅读