黑马程序员技术交流社区

标题: 分享一道入学测试题 [打印本页]

作者: 当我遇上你    时间: 2015-1-11 02:48
标题: 分享一道入学测试题
题目七:编写三各类Ticket、SealWindow、TicketSealCenter分别代表票信息、售票窗口、售票中心。
* 售票中心分配一定数量的票,由若干个售票窗口进行出售,利用你所学的线程知识来模拟此售票过程

(大手勿喷)

  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. }
复制代码

作者: 许庭洲    时间: 2015-1-14 14:28
值得学习ing!
作者: Smart_lll    时间: 2015-1-19 17:04
感觉挺好 喜欢 多谢了~
作者: furymachine    时间: 2015-3-2 16:16
多线程,单例模式目前都还不熟啊,
作者: 陈酷    时间: 2015-3-4 10:35
这道题目在书上看到过
作者: Dark县令    时间: 2015-3-8 00:04
感觉自己好多都不知道是什么、、、




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2