多线程售票问题
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--));
}
}
}
