java线程卖票(wait的使用)

class TicketSeller            // 负责卖票的类
{
   int fiveNumber=1,tenNumber=0,twentyNumber=0; 
   public synchronized void sellTicket(int receiveMoney,int buyNumber) { 
       if(receiveMoney==5) {
          fiveNumber=fiveNumber+1; 
          System.out.printf("\n%s给我5元钱,这是您的1张入场券", Thread.currentThread().getName()); 
       }
       else if(receiveMoney==10&&buyNumber==2) {
           tenNumber=tenNumber+1; 
           System.out.printf("\n%s给我10元钱,这是您的2张入场券",Thread.currentThread().getName()); 
       }
       else if(receiveMoney==10&&buyNumber==1) {  
          while(fiveNumber<1)   // 给出线程需等待的条件
          {    try {   System.out.printf("\n%30s靠边等",Thread.currentThread().getName());
                     this.wait();   // 线程进入等待状态
                      System.out.printf("\n%30s结束等待\n",Thread.currentThread().getName());
               }
               catch(InterruptedException e) { }
           }
           fiveNumber=fiveNumber-1;
           tenNumber=tenNumber+1;
           System.out.printf("\n%s给我10元钱,找您5元,这是您的1张入场券", Thread.currentThread().getName());
       }
       else if(receiveMoney==20&&buyNumber==1) {  
	   while((fiveNumber<3&&tenNumber==0)||fiveNumber==0)// 给出线程需等待的条件
          {    try {    System.out.printf("\n%30s靠边等",Thread.currentThread().getName());
                       this.wait();   // 线程进入等待状态
                       System.out.printf("\n%30s结束等待",Thread.currentThread().getName());
               }
               catch(InterruptedException e) { }
        }
        fiveNumber=fiveNumber-1;
        tenNumber=tenNumber-1;
        twentyNumber=twentyNumber+1;
        System.out.printf("\n%s给20元钱,找您一张5元和一张10元,这是您的1张入场券", Thread.currentThread().getName());
     }
     else if(receiveMoney==20&&buyNumber==2) {
          while((fiveNumber<2&&tenNumber==0))   // 给出线程需等待的条件
          {    try {   System.out.printf("\n%30s靠边等\n",Thread.currentThread().getName());
                    this.wait();   // 线程进入等待状态
                     System.out.printf("\n%30s结束等待",Thread.currentThread().getName());
                  }
                catch(InterruptedException e) { }
          }
          tenNumber=tenNumber-1;
          twentyNumber=twentyNumber+1;
          System.out.printf("\n%s给20元钱,找您一张10元,这是您的2张入场券", Thread.currentThread().getName());
      } 
     notifyAll();   // 通知等待的线程结束等待
  }
}
class Cinema implements Runnable         // 实现Runnable接口的类
{  
   Thread zhao,qian,sun,li,zhou;           // 电影院中买票的线程
   TicketSeller seller;                    // 电影院的售票员
   Cinema() {
      zhao=new Thread(this);
      qian=new Thread(this);
      sun=new Thread(this);
      li=new Thread(this);
      zhou=new Thread(this);
      zhao.setName("赵");
      qian.setName("钱");
   sun.setName("孙");
      li.setName("李");
      zhou.setName("周");
      seller=new TicketSeller();
   } 
   public void run() {
       if(Thread.currentThread()==zhao)
          seller.sellTicket(20,2);
       else if(Thread.currentThread()==qian)
          seller.sellTicket(20,1);
       else if(Thread.currentThread()==sun)
          seller.sellTicket(10,1);
       else if(Thread.currentThread()==li)
          seller.sellTicket(10,2);
       else if(Thread.currentThread()==zhou)
          seller.sellTicket(5,1);
   }
}
public class SaleExample {
   public static void main(String args[]) {
        Cinema cinema=new Cinema();      
        cinema.zhao.start();
        try{  Thread.sleep(1000); 
        } 
        catch(InterruptedException e) { }
        cinema.qian.start();
        try{ Thread.sleep(1000); 
        } 
        catch(InterruptedException e) { }
        cinema.sun.start();
        try{  Thread.sleep(1000); 
        } 
        catch(InterruptedException e) { }
        cinema.li.start();
        try{  Thread.sleep(1000); 
        } 
        catch(InterruptedException e) { } 
        cinema.zhou.start();
   }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值