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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王斌 中级黑马   /  2012-11-23 12:31  /  1937 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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

1 个回复

倒序浏览
public class  SaleWindows {  
         
    public static void main(String[] args){  
  
                SaleCenter sc = new SaleCenter(200);
                SaleTicket st = new SaleTicket();  
                sc.setNum(st);// 售票中心分配票数
                // 创建线程
               Thread t1 = new Thread(st,"一号窗口");  
               Thread t2 = new Thread(st,"二号窗口");  
               Thread t3 = new Thread(st,"三号窗口");  
               Thread t4 = new Thread(st,"四号窗口");
                // 启动线程
               t1.start();                 
               t2.start();               
               t3.start();
                           t4.start();
      
         
    }  
}  

class SaleTicket implements Runnable{  
    private int tickets;
      
    public void setTotalNum(int tickets){
                this.tickets = tickets;// 设置发售总票数
        }  
    private synchronized void sale(){  
        if(tickets > 0){  
            System.out.println(Thread.currentThread().getName() + "售出第 "+ (tickets--)+"张票");  
              
            try{  
                Thread.sleep(tickets);  
            }catch(InterruptedException e){  
                e.printStackTrace();  
            }  
        }  
    }
       
    public void run(){  
        while(tickets > 0){  
            sale();  
        }  
    }  
}  
  
class SaleCenter{
        private int ticketsnum;
        
        SaleCenter(int ticketsnum){
                this.ticketsnum = ticketsnum;
        }
        public void setNum(SaleTicket st)
        {
                st.setTotalNum(ticketsnum); // 授权票数上限
        }
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马