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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

这是入学考试时自己抽到的题目,跟大家分享一下,编写三个类Ticket、SealWindow、TicketSealCenter分别代表票信息、售票窗口、售票中心。售票中心分配一定数量的票,由若干个售票窗口进行出售,利用你所学的线程知识来模拟此售票过程。代码实现如下:
  1. import java.util.ArrayList;
  2. import java.util.Iterator;
  3. import java.util.List;

  4. public class SealTicketsDemo {
  5.         /**
  6.          * @param args
  7.          * 编写三各类Ticket、SealWindow、TicketSealCenter分别代表票信息、售票窗口、售票中心。
  8.          * 售票中心分配一定数量的票,由若干个售票窗口进行出售,利用你所学的线程知识来模拟此售票过程。
  9.          */
  10.         public static void main(String[] args) {
  11.                 Thread t1=new Thread(new SealWindows());
  12.                 t1.setName("1号窗口");
  13.                 Thread t2=new Thread(new SealWindows());
  14.                 t2.setName("2号窗口");
  15.                 Thread t3=new Thread(new SealWindows());
  16.                 t3.setName("3号窗口");
  17.                 Thread t4=new Thread(new SealWindows());
  18.                 t4.setName("4号窗口");
  19.                 Thread t5=new Thread(new SealWindows());
  20.                 t5.setName("5号窗口");
  21.                 t1.start();
  22.                 t2.start();
  23.                 t3.start();
  24.                 t4.start();
  25.                 t5.start();

  26.         }

  27. }
  28. //票信息
  29. class Ticket{
  30.         private int id;

  31.         public int getId() {
  32.                 return id;
  33.         }

  34.         public void setId(int id) {
  35.                 this.id = id;
  36.         }
  37.        
  38. }
  39. //售票窗口
  40. class SealWindows implements Runnable{

  41.         @Override
  42.         public void run() {
  43.                 // TODO Auto-generated method stub
  44.                 SealTickets();
  45.         }
  46.         public static void SealTickets(){
  47.                 TicketSealCenter tsc=TicketSealCenter.getInstance();
  48.                 List<Ticket>tickets=tsc.getTickets();
  49.                 while(!tickets.isEmpty()){
  50.                         synchronized(tickets){
  51.                                 if(tickets.isEmpty())
  52.                                         break;
  53.                         Iterator<Ticket>iterator=tickets.iterator();
  54.                         try {
  55.                                 Thread.sleep(100);
  56.                         } catch (Exception e) {
  57.                                 // TODO: handle exception
  58.                         }
  59.                         Ticket ticket=iterator.next();
  60.                         System.out.println(Thread.currentThread().getName()+"...卖了一张票,ID为:"+ticket.getId());
  61.                         tickets.remove(ticket);
  62.                 }}
  63.         }
  64.        
  65.        
  66. }
  67. //售票中心,将其设置成单例模式
  68. class TicketSealCenter{
  69.         private List<Ticket>tickets=new ArrayList<Ticket>();
  70.         private int ticketNum=50;
  71.         private static TicketSealCenter tsc=new TicketSealCenter();
  72.         private TicketSealCenter(){
  73.                 setIDToTicket(tickets);
  74.         }
  75.         //为每一张票设置ID编号
  76.         public void setIDToTicket(List<Ticket>tickets){
  77.                 for(int i=1;i<=ticketNum;i++){
  78.                         Ticket ticket=new Ticket();
  79.                         ticket.setId(i);
  80.                         tickets.add(ticket);
  81.                 }
  82.         }
  83.         public static TicketSealCenter getInstance(){
  84.                 return tsc;
  85.         }
  86.         public List<Ticket>getTickets(){
  87.                 return tickets;
  88.         }
  89. }
复制代码

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马