java多线程之火车售票系统模拟实例多线程之火车售票系统模拟实例
下面小编就为大家带来一篇java多线程之火车售票系统模拟实例。小编觉得挺不错的,现在就分享给大家,也给
大家做个参考。一起跟随小编过来看看吧
1.前言前言
为了学习多线程共享与通信,我们模拟一个火车售票系统,假设有10张火车票,三个窗口(也就是三个线程)同时进行售
票。
2.非同步代码非同步代码
package com.tl.skyLine.thread;
/**
* Created by tl on 17/3/6.
*/
public class SellTicket {
public static void main(String[] args) {
TicketWindow tw = new TicketWindow();
Thread t1 = new Thread(tw, "一号窗口");
Thread t2 = new Thread(tw, "二号窗口");
Thread t3 = new Thread(tw, "三号窗口");
t1.start();
t2.start();
t3.start();
}
}
class TicketWindow implements Runnable {
private int tickets = 10;
@Override
public void run() {
while (true) {
if (tickets > 0) {
System.out.println("还剩余票:" + tickets + "张");
tickets--;
System.out.println(Thread.currentThread().getName() + "卖出一张火车票,还剩" + tickets + "张");
} else {
System.out.println("余票不足,暂停出售!");
// wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用
try {
Thread.sleep(1000 * 60 * 5);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
打印结果:打印结果:
还剩余票:10张
还剩余票:10张
还剩余票:10张
二号窗口卖出一张火车票,还剩7张
还剩余票:7张
三号窗口卖出一张火车票,还剩8张
一号窗口卖出一张火车票,还剩9张
还剩余票:6张
还剩余票:6张
二号窗口卖出一张火车票,还剩6张
还剩余票:4张
三号窗口卖出一张火车票,还剩4张
还剩余票:3张
一号窗口卖出一张火车票,还剩5张
三号窗口卖出一张火车票,还剩2张
还剩余票:2张
三号窗口卖出一张火车票,还剩1张
还剩余票:1张
三号窗口卖出一张火车票,还剩0张
余票不足,暂停出售!
二号窗口卖出一张火车票,还剩3张
余票不足,暂停出售!
还剩余票:2张
评论0