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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

@在路上

中级黑马

  • 黑马币:116

  • 帖子:62

  • 精华:0

本帖最后由 @在路上 于 2014-12-2 22:16 编辑
  1. class MaiPiao implements Runnable// extends Thread
  2. {    private  int ticket =100;  //static 生命周期过长
  3.          
  4.         public void run()
  5.         {
  6.                 while (true)
  7.                 {   synchronized(this)
  8.                         {
  9.                              if(ticket>0)//子类抛出的异常类型不能比父类抛出的异常类型更宽泛 因为是接口
  10.                                          try{Thread.sleep(10);}catch(Exception e){}        //将这行注释才不会出现负票求解                                                      
  11.                             System.out.println(Thread.currentThread().getName()+"sale:"+ticket-);
  12.                                                                  //Thread.currentThread中的Thread类为何能不能省略
  13.                         }
  14.                 }
  15.         }
  16. }

  17. class  TicketDemo
  18. {
  19.         public static void main(String[] args)
  20.         {
  21.                    MaiPiao p=new MaiPiao();
  22.                       Thread t1=new Thread(p);
  23.               Thread t2=new Thread(p);
  24.                           Thread t3=new Thread(p);
  25.                           Thread t4=new Thread(p);
  26.                           t1.start();
  27.                           t2.start();
  28.                           t3.start();
  29.                           t4.start();
  30.         }
  31. }
复制代码
刚又看了下是if()没加{} :L

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1 淡定

查看全部评分

2 个回复

倒序浏览
因为你少加了对括号。
注意看这里:
if(ticket>0)//子类抛出的异常类型不能比父类抛出的异常类型更宽泛 因为是接口
                                         try{Thread.sleep(10);}catch(Exception e){}        //将这行注释才不会出现负票求解                                                      
                            System.out.println(Thread.currentThread().getName()+"sale:"+ticket-);
我格式化写一下
if(ticket>0)
try{Thread.sleep(10);}catch(Exception e){}  ;//这是第一句
   System.out.println(Thread.currentThread().getName()+"sale:"+ticket-);//这是第二句
换句话说,只有当ticket>0 时才进行 第一句。而无论ticket如何取值,是不影响第二句的。
当你把第一句注释掉,第二句当然变成了第一句,也就是标准的if结构。
你只要
if(ticket>0)  {
try{Thread.sleep(10);}catch(Exception e){}  ;//这是第一句
   System.out.println(Thread.currentThread().getName()+"sale:"+ticket-);//这是第二句
}
把两句括起来,就可以了。(我猜你是这么想的吧)
回复 使用道具 举报
做题眼花了  看了好半天才发现括号问题 :D
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马