本帖最后由 安然无恙 于 2015-10-8 20:14 编辑
编写 三个类 ticket,sellWindow,ticketSellCenter,代表票信息,售票窗口,售票中心,售票中心分配一定数量的票(多个窗口实现多线程售票)
这道题我有答案,但是三个类不知道先写哪个类,方法都是互通的,先写哪个类都写不完整,求大神带上思路和代码! 在下感激不尽!良辰必有重谢下面是我的代码,参考的别人的答案,但是不知从哪个类下手,注释自己添加的,有不对的希望大神指正!
- //测试类
- public class MianShi{
- public static void main(String[] args) {
- //创建对象
- MianShi t = new MianShi();
- //调用票信息
- t.new Ticket();
- }
- //票信息
- class Ticket {
- //构造方法
- public Ticket() {
- //售票中心有一百张票
- TicketSealCenter tsc = new TicketSealCenter(100);
- // 创建5个窗口(循环5次)
- for (int i = 1; i <= 5; i++) {
- //创建窗口 创建售票窗口对象 传入窗口和票数
- Thread t = new Thread(new SealWindow(i, tsc));
- //开启线程
- t.start();
- }
- }
- }
- //售票中心类 定义了票的总数,同步售票方法
- class TicketSealCenter {
- //初始化票数
- int ticketNum = 0;
- // 定义票是否卖完
- boolean flag = false;
- // 定义一个改变票数的方法
- public TicketSealCenter(int num) {
- //把100张票赋值给当前变量
- this.ticketNum = num;
- }
- //同步方法
- public synchronized void sellTicket(SealWindow s) {
- //票数如果大于0
- if (ticketNum > 0) {
- //就把票数分配到各窗口
- int n = s.num;
- //票数--
- System.out.println("第" + n + "售票窗口卖出了第" + (ticketNum--) + "张票");
- } else {
- //否则就为true
- flag = true;
- }
- }
- }
- //创建售票窗口类
- class SealWindow implements Runnable {
- //num表示第几号窗口
- int num;
- //tsc代表售票中心
- TicketSealCenter tsc;
- //构造方法 把窗口和售票中心
- public SealWindow(int num, TicketSealCenter tsc) {
- this.num = num;
- this.tsc = tsc;
- }
- //重写run方法
- public final void run() {
- //只要售票中心的票数没卖完 就一直循环
- while (!tsc.flag) {
- // 调用售票中心类的同步票数
- tsc.sellTicket(this);
- try {
- //延迟100毫秒
- Thread.sleep(100);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- }
- }
- }
复制代码
|
|