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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. package com.itheima;

  2. import java.util.ArrayList;

  3. public class Test7 {

  4.         public static void main(String[] args) {
  5.                
  6.                 TicketSealCenter tc=new TicketSealCenter();
  7.                
  8.                 //定义票
  9.                 for(int i=0;i<50;i++)
  10.                 {
  11.                         tc.putTicket(new Ticket(i, i+8+""));
  12.                 }
  13.                
  14.                 //定义售票窗口
  15.                 SealWindow sw1=new SealWindow(tc);
  16.                 SealWindow sw2=new SealWindow(tc);
  17.                 SealWindow sw3=new SealWindow(tc);
  18.                 SealWindow sw4=new SealWindow(tc);
  19.                 SealWindow sw5=new SealWindow(tc);
  20.                
  21.                 //窗口售票开始
  22.                 sw1.start();
  23.                 sw2.start();
  24.                 sw3.start();
  25.                 sw4.start();
  26.                 sw5.start();
  27.         }
  28. }

  29. class SealWindow extends Thread{
  30.        
  31.         private final TicketSealCenter tc;
  32.        
  33.         //建立窗口
  34.         public SealWindow(TicketSealCenter tc)
  35.         {
  36.                 this.tc=tc;
  37.         }
  38.        
  39.         @Override
  40.         public void run() {
  41.                 while(true)
  42.                 {
  43.                         Ticket ticket=tc.getTicket();//获取售票
  44.                         if(ticket==null)//如果该窗口没有票可售,则结束该线程
  45.                         {
  46.                                 System.out.println(Thread.currentThread().getName()+"窗口已售完");
  47.                                 break;
  48.                         }
  49.                         else
  50.                         {
  51.                                 System.out.println(Thread.currentThread().getName()+"获取票,票号为:"+ticket.getTicketNum());
  52.                         }
  53.                 }
  54.         }
  55. }

  56. class TicketSealCenter{
  57.        
  58.         //存放车票
  59.         private ArrayList<Ticket> tickets=new ArrayList<Ticket>();
  60.         //存储票数
  61.         private volatile int capacity=0;
  62.         //存票
  63.         public synchronized void putTicket(Ticket ticket)
  64.         {
  65.                 tickets.add(ticket);
  66.                 capacity++;
  67.         }
  68.         //获取票
  69.         public synchronized Ticket getTicket()
  70.         {
  71.                 if(capacity==0)
  72.                         return null;
  73.                
  74.                 Ticket ticket=tickets.get(capacity-1);
  75.                 capacity--;
  76.                 tickets.remove(ticket);
  77.                 return ticket;
  78.         }
  79.        
  80. }
  81. class Ticket{
  82.        
  83.         private int ticketNum;//票号
  84.         private String seatNum;//座位号
  85.        
  86.         public Ticket(int ticketNum,String seatNum){
  87.                
  88.                 this.ticketNum=ticketNum;
  89.                 this.seatNum=seatNum;
  90.         }

  91.         public int getTicketNum() {
  92.                 return ticketNum;
  93.         }
  94.        
  95. }
复制代码


0 个回复

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