黑马程序员技术交流社区

标题: 还是关于多线程卖票的小程序,一点小问题-PS.原谅我刨根... [打印本页]

作者: 会说话的木头    时间: 2014-4-17 11:32
标题: 还是关于多线程卖票的小程序,一点小问题-PS.原谅我刨根...
  1. class Ticket implements Runnable//extends Thread
  2. {
  3.         private  int tick =100;
  4.         //Object obj = new Object();
  5.         public void run()
  6.         {
  7.                
  8.                 while (true)
  9.                 {
  10.                        
  11.                        
  12.                         if (tick>0)
  13.                        
  14.                                 try
  15.                         {
  16.                                 Thread.sleep(10);
  17.                         }
  18.                                 catch (Exception e)
  19.                         {
  20.                         }
  21.                                 System.out.println(Thread.currentThread().getName()+"sale :  "+tick--);
  22.                                
  23.                         }
  24.                        
  25.                 }
  26.                        
  27.                        
  28.         }
  29. }
  30. class  TicketDemo2
  31. {
  32.         public static void main(String[] args)
  33.         {
  34.                 Ticket  t=new Ticket();

  35.             Thread t1 = new Thread(t);
  36.         Thread t2 = new Thread(t);
  37.                 Thread t3 = new Thread(t);
  38.                 Thread t4 = new Thread(t);
  39.                 t1.start();
  40.                 t2.start();
  41.                 t3.start();
  42.                 t4.start();
  43.         }
  44. }
复制代码
我把if的{}去掉,就出现如图的结果,加{}和不加{}怎么出现截然不同的结果???

QQ截图20140417112957.png (9.96 KB, 下载次数: 4)

QQ截图20140417112957.png

作者: ⒈心只霸占沵    时间: 2014-4-17 11:49
1,如果if带{}当符合条件,执行{}里的所有内容
2,如果if不带{}符合条件,只执行if后面的一行代码
3,合成一句话就是,如果你的if 代码块中只有一行代码 {}可以省略不写
你的代码,去掉和不去掉的代码分别是一下两种情况
  1. //{}未省略
  2. while (true)   {
  3.           if (tick>0){
  4.                   try{ Thread.sleep(10);}catch (Exception e){}   
  5.               System.out.println(Thread.currentThread().getName()+"sale :  "+tick--);
  6.         }
  7. }
  8. //{}省略
  9. while (true)   {
  10.        if (tick>0)
  11.        try{ Thread.sleep(10);}catch (Exception e){}   //只有这行代码属于if 条件代码块里的

  12.        System.out.println(Thread.currentThread().getName()+"sale :  "+tick--);//这行则属于if代码块以外
  13.    
  14.     }
复制代码

作者: 清风有意    时间: 2014-4-17 12:10
楼上说得对!

作者: 2528870651    时间: 2014-4-17 12:13
if后面加{},表示{}里面的内容都是if里面的。
if后面不加{},if就只执行if后面的一句话。
所以如果,if后面只接一句话的话加{}和不加{}是没有区别的。
  1. if(x<10)
  2.        System.out.print(x);

  3. if(x<10)
  4. {
  5.    System.out.println(x);
  6. }
  7. 是一样的

  8.      
复制代码


但是如果if后面有不止一句话时,就是2种不同的情况。
上面的哥们也说了,我也不废话了。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2