火车站卖票案例(三个窗口同时进行)
1.创建一个类TicketDemo,并实现多线程(三个方式任意一种)
2.循环打印票数
3.进行测试,对TicketDemo实例化
但此时会出现并发的问题,运行结果如下:
。。。。。。
出现这种问题是没有加同步锁,即synchronized
此时已经加同步锁还会发生以上结果要用synchronized调用父类,即解决放法如下:
4.完整代码:
public class TicketDemo extends Thread{ // 设置票数 static int ticketNum = 100; static Object ob = new Object(); @Override public void run() { while (true){ synchronized (ob) { // 如果ticketNum>0有票 if (ticketNum > 0) { System.out.println("当前车次第" + ticketNum + "号票"); // 输出之后票数要减掉一张 ticketNum--; } else { System.out.println("已售完"); // 售完要退出 System.exit(0); } } } } public static void main(String[] args) { TicketDemo t1 = new TicketDemo(); t1.start(); TicketDemo t2 = new TicketDemo(); t2.start(); TicketDemo t3 = new TicketDemo(); t3.start(); } }
5.运行结果