编写三各类Ticket、SealWindow、TicketSealCenter分别代表票信息、售票窗口、售票中心。售票中心分配一定数量的票,由若干个售票窗口进行出售,利用你所学的线程知识来模拟此售票过

编写三各类Ticket、SealWindow、TicketSealCenter分别代表票信息、售票窗口、售票中心。售票中心分配一定数量的票,由若干个售票窗口进行出售,利用你所学的线程知识来模拟此售票过


package com.itheima;
/**
 *第7题:编写三各类Ticket、SealWindow、TicketSealCenter分别代表票信息、售票窗口、售票中心。
 *售票中心分配一定数量的票,由若干个售票窗口进行出售,利用你所学的线程知识来模拟此售票过程。
 *分析:
 *首先需要创建三个类,
 *TicketSealCenter需要创建一个成员变量;并提供构造方法方便其他类的引用
 *SealWindow用来对买票信息的同步,并提供构造方法方便其他类的引用
 *Ticket,定义票的类型,并提供构造方法方便其他类的引用
 *因为是多个窗口同时卖票,这几个窗口不能同时卖一张票,所有需要加入同步锁进行同步。
 */
public class Test7 {
public static void main(String[] args) {
	//创建一个票信息的类,初始化票信息
	Ticket t = new Ticket("车票",100);
	//创建一个票价中心的类,初始化票的数量
	TicketSealCenter ts = new TicketSealCenter(100);
	//创建售票窗口的类
	SealWindow sw = new SealWindow(t, ts);
	//开启多个售票窗口,实现多窗口卖票
	for(int x=0;x<3;x++){
		new Thread(sw).start();
		
	}
}
}

//票信息类
class Ticket{
//	名称
	private String name ;
//	价格
	private int price;
	public Ticket() {
		super();
		// TODO Auto-generated constructor stub
	}
	public Ticket(String name, int price) {
		super();
		this.name = name;
		this.price = price;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getPrice() {
		return price;
	}
	public void setPrice(int price) {
		this.price = price;
	}
	
}
//售票窗口类,实现Runnable接口
class SealWindow implements Runnable{
	//用来获取售票中心的票数
	int count;
	Ticket t= new Ticket();
	TicketSealCenter ts = new TicketSealCenter();
	SealWindow(Ticket t,TicketSealCenter ts){
		this.t=t;
		this.ts = ts;
		//获取票的数量赋值给count
		count = ts.getTickets();
	}
//	创建加锁对象
	Object obj= new Object();
	@Override
	public void run() {
//		使用同步加锁
		synchronized (obj) {
		while(true){
//			如果票数大于0,说明还有票
			if(count>0){
//				输出售票信息
				System.out.println(Thread.currentThread().getName()+"  "+"   名称:"+t.getName()+"\t"+"   剩余张数:"+count+"   价格:"+t.getPrice()+"元");
//				票数-1
				count--;
			}
		}
		}
	}
}
//售票中心类
class TicketSealCenter{
	//票的数量
	private int tickets;
	public TicketSealCenter() {
		super();
		// TODO Auto-generated constructor stub
	}
	public TicketSealCenter(int tickets) {
		super();
		this.tickets = tickets;
	}

	public int getTickets() {
		return tickets;
	}
	public void setTickets(int tickets) {
		this.tickets = tickets;
	}
}


  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值