案例描述:模拟火车站多个售票窗口同时售票(总共20张票,5个窗口同时卖票)
案例代码如下:
/**
* 售票类--票的唯一来源
* @author Administrator
*/
class TicketSys {
private int totalTickets = 20; // 总票数
private int saledTickets = 0; // 已经售票数目
// 添加同步后,同一时间只能有一个窗口卖票
public synchronized void saleTicket() {
if (totalTickets <= 0) {
throw new RuntimeException("票已经卖完");
}
// 卖掉一张票
saledTickets++;
System.out.println("打印一张票!已经售出" + saledTickets);
try {
Thread.sleep(20); //模拟卖一张票的过程需要花20毫秒
} catch (InterruptedException e) {
e.printStackTrace();
}
// 总票数 -1
totalTickets--;
System.out.println("剩余票数:" + totalTickets);
}
}
======================================
/**
* 售票窗口类
* @author Administrator
*/
class SaleTicket implements Runnable {