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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 446111220 中级黑马   /  2015-1-10 11:07  /  1408 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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

但是首先前提是有一个Test类   这就让我很头疼  因为这样一共需要4个类   求大神帮下忙给个思路啊

6 个回复

正序浏览
史磊 中级黑马 2015-1-11 19:41:00
7#
好像见过,定义几个类啊
回复 使用道具 举报
我是这么写的,你参考下
  1. public class Test7 {

  2.         public static void main(String[] args) {
  3.                
  4.                 //创建SealWindow对象
  5.                 SealWindow sw=new SealWindow();
  6.                
  7.                 //创建并开启四个线程
  8.                 new Thread(sw,"窗口一").start();
  9.                 new Thread(sw,"窗口二").start();
  10.                 new Thread(sw,"窗口三").start();
  11.                 new Thread(sw,"窗口四").start();
  12.         }
  13. }

  14. //模拟售票中心功能属性
  15. class TicketSealCenter
  16. {
  17.        
  18.         //售票中心唯一,单例设计
  19.         private  static TicketSealCenter instance=new TicketSealCenter();
  20.         TicketSealCenter(){}
  21.         public static TicketSealCenter getInstance()
  22.         {
  23.                 return instance;
  24.         }

  25.         //售票中心具有统一发票功能
  26.         private Ticket ticket=new Ticket();
  27.         public int getTickets()
  28.         {
  29.                 return ticket.generateTickets();       
  30.         }
  31. }


  32. //模拟售票窗口,由于是几个窗口同时买票,多线程对象应该是窗口
  33. class SealWindow implements Runnable
  34. {
  35.    //获取售票中心发放的火车票
  36.    private int tickets=TicketSealCenter.getInstance().getTickets();
  37.   
  38.    //定义任意一个对象,并做同步代码块的锁
  39.    Object lock=new Object();
  40.    public void run()  
  41.    {  
  42.            while(true)
  43.            {
  44.                   //定义同步代码块
  45.                    synchronized(lock)
  46.                   {
  47.                          
  48.                            //经过的线程休眠10s
  49.                            try
  50.                           {
  51.                                   Thread.sleep(10);
  52.                       }
  53.                           catch (Exception e)
  54.                           {
  55.                                 e.printStackTrace();
  56.                           }
  57.                          

  58.                            //输出售票信息
  59.                           if(tickets>0)
  60.                           {
  61.                                           System.out.println(Thread.currentThread().getName()+"正在发售第"+tickets--+"张票");  
  62.                           }
  63.                           else
  64.                           {
  65.                                   break;
  66.                           }
  67.                   }
  68.            }
  69.    }  
  70. }

  71. //模拟火车票应有属性及方法
  72. class Ticket
  73. {
  74.         //车票的属性有车厢号和座位号,num1代表车厢号,num2代表座位号
  75.         int num1=1;
  76.         int num2=100;
  77.         public String getMessage()
  78.         {
  79.                 return "车厢号:"+num1+"座位号:"+num2;
  80.         }
  81.         public int generateTickets()
  82.         {
  83.                 return num2;
  84.         }
  85.        
  86. }
复制代码
回复 使用道具 举报
老毕视频里不是有类似的售票程序吗
回复 使用道具 举报
这道题 我看到别人分享的有啊
回复 使用道具 举报
这是ios吗?什么叫先有一个test类
回复 使用道具 举报
Test类和你上面三个类不属于同一级别,Test类有专门的处理机制,我记得好像有个testunit之类的玩意,你上面的三个类注意下线程同步和锁定,没什么其他要注意的!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马