窗口2买了一张票还剩:3张票
窗口3买了一张票还剩:2张票
窗口3买了一张票还剩:0张票
窗口1买了一张票还剩:3张票
窗口2买了一张票还剩:1张票
也是对的,线程执行顺序是随机的
public void run() { // TODO Auto-generated method stub while(true){ synchronized(lockObj){ if(ticketsNum>0){ ticketsNum--; System.out.println(Thread.currentThread().getName()+"卖出一张票,剩余"+ticketsNum); //Thread.yield(); lockObj.notifyAll(); } } } }
这样改就能按顺序输出了
我懂了 同时运行的 两个线程都在买票
多运行几次 偶尔是这个结果:
窗口1买了一张票还剩:4张票
窗口1买了一张票还剩:3张票
窗口1买了一张票还剩:2张票
窗口1买了一张票还剩:1张票
窗口1买了一张票还剩:0张票