A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 695783362 中级黑马   /  2016-11-10 22:08  /  880 人查看  /  1 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文


package com.itheima;

public class Test28 {

        public static void main(String[] args) {
            Test28 t = new Test28();
            t.new Ticket();

          }

          class Ticket {
            public Ticket() {
              TicketSealCenter tsc = new TicketSealCenter(100);// 定义有100张票
              for (int i = 0; i < 5; i++) {// 定义有5个窗口
                new Thread(new SealWindow(i, tsc)).start();// 启动售票窗口售票
              }
            }
          }

          /**
           * 售票中心类 定义了票的总数,同步售票方法
           */
          class TicketSealCenter {
            int ticketNum = 50;
            boolean flag = false; // 定义票是否卖完

            public TicketSealCenter(int num) {// 定义一个改变票数的方法
              this.ticketNum = num;
            }

            public synchronized void sellTicket(SealWindow s) {
              if (ticketNum > 0) {//票数如果大于0
                int n = s.num + 1;//n表示第几号窗口
                System.out
                    .println("第--" + n + "--售票窗口卖出了第" + ticketNum + "张票!");
                ticketNum--;//卖出一张票后减1
              } else {
                flag = true;
              }
            }
          }

          /**
           * 售票窗口类
           */
          class SealWindow implements Runnable {
            int num;//num表示第几号窗口-1,即i
            TicketSealCenter tsc;

            public SealWindow(int num, TicketSealCenter tsc) {
              this.num = num;
              this.tsc = tsc;
            }

            public final void run() {
              while (!tsc.flag) {
                tsc.sellTicket(this); // 调用售票中心类的同步票数
                try {
                  Thread.sleep(100);
                } catch (InterruptedException e) {
                  e.printStackTrace();
                }
              }
            }
          }
}

1 个回复

倒序浏览
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马