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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄丽慧 中级黑马   /  2012-7-26 16:08  /  2054 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

同步视频中,买票的例子中
while(true)
                        {
                                synchronized(obj)//当不加锁的时候,eclipse会卡死,感觉有点像死循环,这是为什么
                                {
                                        if(tick>0)
                                         System.out.println(Thread.currentThread().getName()+"...on sale..."+tick--);
                                       //有必要在这里加上一句else  break;吗
                                }
                        }

有个小地方我感觉有点疑问,while循环中的值是true,当tick为0打印完以后,tick--计算后,tick为-1,不符合判断不打印,那程序是否会不停地在while语句和if语句间进行判断?

4 个回复

倒序浏览
这就是一个死循环while(true){}就是用来不断执行循环体的。如果只有while没有其他的打断操作,或者循环结束的标志,就需要使用

来结束程序的运行。
break没有必要。因为这个循环体不可能一直占用CPU,或许有其他进程占用CPU,循环等这个进程执行完再执行。
回复 使用道具 举报
当不加锁的时候,eclipse会卡死,感觉有点像死循环,这是为什么//把锁去掉没卡死啊
回复 使用道具 举报
while(true)
                         {
                                 synchronized(obj)//当不加锁的时候,eclipse会卡死,感觉有点像死循环,这是为什么
                                 {
                                         if(tick>0)
                                          System.out.println(Thread.currentThread().getName()+"...on sale..."+tick--);
                                        //有必要在这里加上一句else  break;吗
                                 }
                         }
while(true)如果不改变条件也不用break跳出的话就是一个死循环。if(tick>0)是说当tick>0,才满足条件,才会走if的内容。如果你去掉else{break},那就是当tick
=0了,不满足if条件了,所以不会走if了,但是while(true)还是满足的,循环还会继续。所以要在这里加个else{break}跳出while循环。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马